2017-10-18 48 views
1

我的目標是獲取客戶餘額報告,但我被困在我的查詢 中,我可以獲取某個列的文檔類型。我有我的查詢SQL返回1或來自多列的不同值

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 

爲u可以在我的查詢看到它返回的總淨,收費,CDW和金額 ,但我的目標是讓他們在1列在不同行。你可以看到我附加的圖像,這是我的查詢目標。

enter image description here

任何人有這個想法?謝謝。

回答

1

我喜歡用apply爲unpivoting:

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); 
+0

謝謝!我現在有了這個想法。但是,我可以問一些爲什麼它會返回 這樣的字符串,如列的名稱下面的「----」?我對此不熟悉。 – FritsJ

+2

這就是你用來查詢作品的應用程序。 SQL Server Management Studio在將結果置於文本模式而不是網格時執行此操作。 –