将2列值获取为1列的2列(或以逗号分隔)

时间:2017-12-13 14:17:31

标签: sql sql-server pivot

我有一个问题,我必须改变另一个程序员非常大的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

1 个答案:

答案 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