我相信这是一个非常简单的问题,其答案同样简单,但我无法弄清楚。如何填充唯一键的值
我有一个临时表建模像这样与该查询返回的数据,如下所示:
+--------+------+---------+---------+--------+-----------+--------+-----+
| Acct # | PO # | Store # | Order # | Line # | Ship Date | Item # | Qty |
+--------+------+---------+---------+--------+-----------+--------+-----+
| 0777 | 3340 | 648 | 1756013 | 1 | 11/23/16 | 100598 | 1 |
| 0777 | 3340 | 648 | 1756013 | 2 | 11/23/16 | 100597 | 1 |
| 0777 | 3340 | 648 | 1756013 | 3 | 11/23/16 | 100598 | 1 |
| 0777 | 3340 | 648 | 1756013 | 4 | 11/23/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 1 | 12/01/16 | 150962 | 1 |
| 0777 | 3341 | 720 | 1760001 | 3 | 12/01/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 4 | 12/01/16 | 150961 | 1 |
| 0777 | 3341 | 720 | 1760001 | 7 | 12/01/16 | 150961 | 1 |
| 0777 | 3341 | 720 | 1760001 | 8 | 12/01/16 | 156961 | 1 |
+--------+------+---------+---------+--------+-----------+--------+-----+
我应该被合并样行在一起,使得从1到2,等数量的增加,对于订单号上相同的每个料号。我有这部分工作,但为了做到这一点,我不得不摆脱了行号,所以返回的数据看起来像这样:
+--------+------+---------+---------+-----------+--------+-----+
| Acct # | PO # | Store # | Order # | Ship Date | Item # | Qty |
+--------+------+---------+---------+-----------+--------+-----+
| 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100598 | 2 |
| 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100597 | 1 |
| 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 12/01/16 | 150962 | 1 |
| 0777 | 3341 | 720 | 1760001 | 12/01/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 12/01/16 | 150961 | 3 |
+--------+------+---------+---------+-----------+--------+-----+
不过,我需要的线#列上为了准确报告-line正在处理,发货等等。我知道STUFF()函数可以做到这一点,不同之处在于它添加了每一行,而不仅仅是订单#的特定行。这里是我的查询:
SELECT DISTINCT
SupplierAcctNumber AS 'Acct #',
BuyerPONumber AS 'PO #',
BuyerStoreNumber AS 'Store #',
SupplierOrderNumber AS 'Order #',
SupplierOrderLine =
STUFF((SELECT ',' + CAST(t.SupplierOrderLine AS VARCHAR)
FROM @temp t
WHERE t.SupplierOrderNumber = SupplierOrderNumber
AND t.BuyerItemNumber = BuyerItemNumber FOR XML PATH ('')),1,1,''),
SupplierShipDate AS 'Ship Date',
BuyerItemNumber AS 'Item #',
SUM(SupplierQtyOrdered) AS 'Qty'
FROM @temp
GROUP BY SupplierAcctNumber, BuyerPONumber, BuyerStoreNumber, SupplierOrderNumber,
SupplierOrderLine, SupplierShipDate, BuyerItemNumber
ORDER BY SupplierOrderNumber
这里是我得到的结果:
+--------+------+---------+---------+-------------------+-----------+--------+-----+
| Acct # | PO # | Store # | Order # | Line # | Ship Date | Item # | Qty |
+--------+------+---------+---------+-------------------+-----------+--------+-----+
| 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100598 | 2 |
| 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100597 | 1 |
| 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 150962 | 1 |
| 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 150961 | 3 |
+--------+------+---------+---------+-------------------+-----------+--------+-----+
下面是我希望的结果:
+--------+------+---------+---------+-------------------+-----------+--------+-----+
| Acct # | PO # | Store # | Order # | Line # | Ship Date | Item # | Qty |
+--------+------+---------+---------+-------------------+-----------+--------+-----+
| 0777 | 3340 | 648 | 1756013 | 1,3 | 11/23/16 | 100598 | 2 |
| 0777 | 3340 | 648 | 1756013 | 2 | 11/23/16 | 100597 | 1 |
| 0777 | 3340 | 648 | 1756013 | 4 | 11/23/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 1 | 12/01/16 | 150962 | 1 |
| 0777 | 3341 | 720 | 1760001 | 3 | 12/01/16 | 100596 | 1 |
| 0777 | 3341 | 720 | 1760001 | 4,7,8 | 12/01/16 | 150961 | 3 |
+--------+------+---------+---------+-------------------+-----------+--------+-----+
你已经混杂了一些事情。你的东西声明应该是'FROM @ temp',没有必要的表别名,而你的主查询应该有'FROM @temp t' – ZLK
我认为150961应该是你最后一个记录中的项目#不是156961 – scsimon
Woooow .... I不能相信我没有接受。谢谢!你能提交一个答案,以便我可以给你信用? – PhoenixFly