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 查询
中做什么
你可以试试
- 将其分组到 ItemNo 上以获得单行
- 使用 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
这是我的 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 查询
中做什么你可以试试
- 将其分组到 ItemNo 上以获得单行
- 使用 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