我有一个问题,我必须改变另一个程序员非常大的SQL查询。 我的问题由此表描述:
+--------+-----------+---------------+-------------------------+
| Id | ProductId | Barcode | CreatedAt |
+--------+-----------+---------------+-------------------------+
| 30665 | 312118 | 4054065383840 | 2017-03-13 18:37:13.130 |
| 128600 | 312118 | 4054065383857 | 2017-05-22 13:26:48.683 |
+--------+-----------+---------------+-------------------------+
如您所见,产品有2个条形码。在我们的查询中,我需要在2列中显示这2个条形码,而不是2个不同的行,如barcode1和barcode2,或者其他一些。
SELECT ISNULL(pp.Barcode,'') AS BarCode
FROM (...) c
LEFT JOIN ProductBarcode pp on pp.ProductId=c.VariantProductId
这是atm中使用的查询。 希望我解释得很好。 提前致谢, 拉斯穆斯。
编辑:db是MSSQL
答案 0 :(得分:1)
使用pivot
查询,在此方案中非常有效。如果有多个条形码为barcode1,barcode2,barcode3
SELECT productid
,[1] AS Barcode1
,[2] AS Barcode2
FROM (
SELECT productid
,barcode
,ROW_NUMBER() OVER (
PARTITION BY productid ORDER BY barcode
) rn
FROM #mytable
) my
pivot(max(barcode) FOR rn IN ([1], [2])) AS pvt