Sql 为ColumnB中的每个唯一值计算ColumnA中的不同值
我有一个装运编号表(可以重复)和一个连接的起始-目的地字段(可以重复)。我有一个select列,它为每个装运编号选择所有的始发地目的地。我想添加第三列,用于获取每个唯一装运编号的唯一原产地目的地的数量 我试着做了一个实验Sql 为ColumnB中的每个唯一值计算ColumnA中的不同值,sql,sql-server,Sql,Sql Server,我有一个装运编号表(可以重复)和一个连接的起始-目的地字段(可以重复)。我有一个select列,它为每个装运编号选择所有的始发地目的地。我想添加第三列,用于获取每个唯一装运编号的唯一原产地目的地的数量 我试着做了一个实验 Select [OD], [ShipmentNo], [UniqueODs] = (COUNT([OD])) 也试过了 Select [OD], [ShipmentNo], [UniqueODs] =(COUNT([ShipmentNo]) 而不是[OD]。在我的附加
Select [OD], [ShipmentNo], [UniqueODs] = (COUNT([OD]))
也试过了
Select [OD], [ShipmentNo], [UniqueODs] =(COUNT([ShipmentNo])
而不是[OD]。在我的附加列中,所有内容都返回1
SELECT [OD],
[ShipmentNo],
[UniqueODs] = (COUNT([OD]))
FROM tblShipments
GROUP BY MVMT_NO, [OD Pair]
ORDER BY MVMT_NO, [OD Pair]
预期结果:
[Origin-Destination] [ShipmentNo] [UniqueODs]
Michigan-California A484310 1
Michigan-California A484311 1
Texas-California A484312 2
Michigan-California A484312 2
[OD] [ShipmentNo] [UniqueODsForSN]
Michigan-California A484310 1
Michigan-California A484311 1
Texas-California A484312 2
Michigan-California A484312 2
目前的结果:
[Origin-Destination] [ShipmentNo] [UniqueODs]
Michigan-California A484310 1
Michigan-California A484311 1
Texas-California A484312 1
Michigan-California A484312 1
我希望两行上A484312的输出都是2,而不是1
预期结果:
[Origin-Destination] [ShipmentNo] [UniqueODs]
Michigan-California A484310 1
Michigan-California A484311 1
Texas-California A484312 2
Michigan-California A484312 2
[OD] [ShipmentNo] [UniqueODsForSN]
Michigan-California A484310 1
Michigan-California A484311 1
Texas-California A484312 2
Michigan-California A484312 2
我想您需要一个窗口功能:
SELECT OD, ShipmentNo, SUM(COUNT(*)) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
GROUP BY MVMT_NO, [OD Pair]
ORDER BY MVMT_NO, [OD Pair];
嗯。如果当前计数为1
,则不需要聚合:
SELECT OD, ShipmentNo, COUNT(*) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
ORDER BY MVMT_NO, [OD Pair];
编辑:
如果你真的想要:
SELECT OD, ShipmentNo, COUNT(*) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
GROUP BY MVMT_NO, [OD Pair]
ORDER BY MVMT_NO, [OD Pair];
我想您需要一个窗口功能:
SELECT OD, ShipmentNo, SUM(COUNT(*)) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
GROUP BY MVMT_NO, [OD Pair]
ORDER BY MVMT_NO, [OD Pair];
嗯。如果当前计数为1
,则不需要聚合:
SELECT OD, ShipmentNo, COUNT(*) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
ORDER BY MVMT_NO, [OD Pair];
编辑:
如果你真的想要:
SELECT OD, ShipmentNo, COUNT(*) OVER (PARTITION BY ShipmentNo) as UniqueODs
FROM tblShipments
GROUP BY MVMT_NO, [OD Pair]
ORDER BY MVMT_NO, [OD Pair];
您应该提供一个要处理的示例数据。您应该提供一个要处理的示例数据。到此为止。它确实得到了ShipmentNo的ODs数量,但没有得到ShipmentNo的唯一*ODs数量。有什么想法吗?@NthngLeftToBurn。您问题中的示例数据不包含任何重复项。但请查看最后一次编辑。这已接近尾声。它确实得到了ShipmentNo的ODs数量,但没有得到ShipmentNo的唯一*ODs数量。有什么想法吗?@NthngLeftToBurn。您问题中的示例数据不包含任何重复项。但请查看最后一次编辑。