SQL返回1或多列中的不同值

时间:2017-10-18 11:50:20

标签: sql sql-server

我的目标是获取客户余额报告,但我遇到了问题 我可以在哪里获得某个专栏的doc类型。我有我的查询

SELECT
ROW_NUMBER() OVER( ORDER BY DR.id ) AS 'NO.' ,          
CONVERT(VARCHAR(13), CAST(DR.doc_date AS DATE), 100) AS 'DOC DATE',
SR.net_total,
SR.dell_col_charge,
SR.CDW,
sp.amount
FROM 
[dbo].[doc_customer]                DC
LEFT JOIN   [dbo].[doc_rent]            DR ON DR.doc_sourced_customer_id = DC.id
LEFT JOIN   [dbo].[slip_rent]           SR ON SR.doc_sourced_doc_rent_id = DR.id
LEFT JOIN   [dbo].[slip_rent_payment]   SP ON SP.doc_sourced_rent_id     = DR.id

你可以在我的查询中看到它返回净总额,费用,cdw和金额 但我的目标是将它们显示在不同行的1列中。你可以在我附上的图片上看到我的查询目标。

enter image description here

谁有想法?感谢。

1 个答案:

答案 0 :(得分:2)

我喜欢使用apply进行取消隐藏:

SELECT ROW_NUMBER() OVER( ORDER BY DR.id ) AS [NO.] ,          
       CONVERT(VARCHAR(13), CAST(DR.doc_date AS DATE), 100) AS [DOC DATE],
       v.*
FROM [dbo].[doc_customer] DC LEFT JOIN
     [dbo].[doc_rent] DR
     ON DR.doc_sourced_customer_id = DC.id LEFT JOIN
     [dbo].[slip_rent] SR
     ON SR.doc_sourced_doc_rent_id = DR.id LEFT JOIN
     [dbo].[slip_rent_payment] SP
     ON SP.doc_sourced_rent_id = DR.id OUTER APPLY
     (VALUES ('net_total', SR.net_total),
             ('dell_col_charge', SR.dell_col_charge),
             ('CDW', SR.CDW),
             ('amount', sp.amount)
     ) v(which, val);