sql 中的多个值相同的 id 成单行

Multiple value same id into single line in sql

这是我的 table 我想以一行格式添加值 我的代码是

OrderDate OrderID ItemNo PaymentType        Cash    Nets    Visa    AMEX MasterCard Voucher Remarks ReciptNo

2018-01-27  809   40149  Mix Payment Type   NULL    NULL    NULL    NULL    NULL    55.00   NULL    NULL
2018-01-27  809   40149  Mix Payment Type   NULL    NULL    NULL    NULL    10.00   NULL    NULL    ABC123
2018-01-27  809   40149  Mix Payment Type   NULL    NULL    NULL    4.00    NULL    NULL    NULL    PQE789
2018-01-27  809   40149  Mix Payment Type   NULL    NULL    10.00   NULL    NULL    NULL    NULL    123456
2018-01-27  809   40149  Mix Payment Type   20.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL

我想要 o/p 喜欢

OrderDate   OrderID     ItemNo       PaymentType        Cash    Nets    Visa    AMEX    MasterCard  Voucher Remarks    ReciptNo
2018-01-27  809         40149        Mix Payment Type   20.00   NULL    10.00   4.00    10.00       55.00   NULL    ABC123,PQR789,123456

我应该在 sql 查询

中做什么

你可以试试

  1. 将其分组到 ItemNo 上以获得单行
  2. 使用 MAX(Cash) 等得到唯一的非空值

因为您只需要一个具有相同值的列,您可以通过以下方法进行分组:

SELECT
  OrderDate, OrderID, ItemNo, PaymentType,
  MAX(cash), MAX(nets), MAX(Visa), MAX(AMEX), MAX(MasterCard), MAX(Voucher),
  STRING_AGG(Remarks, ', '), STRING_AGG(ReciptNo, ', ')
FROM myTable
GROUP BY OrderDate, OrderID, ItemNo, PaymentType

这显然只有在没有两行都具有例如现金条目的情况下才有效。

PS: SQLFiddle 玩玩

尝试这样的事情:

SELECT OrderDate,
       OrderID,
       ItemNo,
       PaymentType,
       MAX(Cash),
       MAX(Nets),
       MAX(Visa),
       MAX(AMEX),
       MAX(MasterCard),
       MAX(Voucher),
       MAX(Remarks),
       STUFF((
            SELECT ', ' + ISNULL(R2.ReciptNo,'')
            FROM TableName t2
            WHERE t1.OrderID= t2.OrderID
            FOR XML PATH ('')), 1, 2, '') AS ReciptNos
FROM TableName t1
GROUP BY OrderDate,OrderID,ItemNo,PaymentType