2015-11-20 86 views
0

我有這樣的一個表:彙總表生成的SQL Server

enter image description here

我想看看在這樣的摘要視圖數據:

enter image description here

我需要幫助一個T-SQL腳本。謝謝。

對不起我的小英文。

+1

你能分享到目前爲止,你做了什麼? – wogsland

+1

這種事情在前端是最好的,特別是如果你需要在這樣的特定行中有空值。它當然可以在SQL中完成,它只是一個錯誤的地方。如果您可以在sqlfiddle上發佈一些數據,我們可以提供幫助。 –

+0

你想看看做一個'Pivot' –

回答

2

這工作:

[設置]

CREATE TABLE #PaymentTable (Id INT IDENTITY, AccountGroupId INT, AccountId INT, Payment INT) 
INSERT INTO #PaymentTable (AccountGroupId, AccountId, Payment) 
SELECT 1, 1, 5 UNION ALL SELECT 1, 1, 5 UNION ALL 
SELECT 1, 2, 5 UNION ALL SELECT 2, 4, 5 UNION ALL 
SELECT 2, 3, 5 UNION ALL SELECT 2, 3, 5 UNION ALL 
SELECT 2, 4, 5 

CREATE TABLE #Group (AccountGroupId INT, GroupName VARCHAR(100)) 
INSERT INTO #Group (AccountGroupId, GroupName) 
SELECT 1, 'Group 1' UNION Select 2, 'Group 2' 

CREATE TABLE #Account (AccountId INT, AccountName VARCHAR(100)) 
INSERT INTO #Account (AccountId, AccountName) 
SELECT 1, 'John' UNION Select 2, 'Edvard' UNION 
SELECT 3, 'David' UNION SELECT 4, 'Jimi' 

[查詢]

SELECT 
    [Group], 
    Account, 
    TotalPayment 
FROM 
    (
    SELECT 
     #Group.AccountGroupId AS GroupId, 
     GroupName AS [Group], 
     '' AS Account, 
     SUM(Payment) AS TotalPayment, 
     0 AS InnerOrder 
    FROM 
     #PaymentTable, 
     #Group 
    WHERE 
     #Group.AccountGroupId = #PaymentTable.AccountGroupId 
    GROUP BY 
     #Group.AccountGroupId, 
     #Group.GroupName 
    UNION 
    SELECT 
     AccountGroupId AS GroupId, 
     '' AS [Group], 
     AccountName AS Account, 
     SUM(Payment) AS TotalPayment, 
     1 AS InnerOrder 
    FROM 
     #PaymentTable, 
     #Account 
    WHERE 
     #Account.AccountId = #PaymentTable.AccountId 
    GROUP BY 
     AccountGroupId, 
     AccountName 
) AS inner_query 
ORDER BY 
    GroupId, 
    InnerOrder, 
    Account 
+0

其他意見,建議樞紐或前端開發。這些對於某些情況來說都是很好的解決方案,但是我遇到過這樣的環境:數據使用者要麼以可怕的方式正確顯示數據(例如BIRT及其基於Rhino/Javascript/Java的混合腳本引擎)或者完全無法訪問(例如,基於從數據庫接收到的確切設置,僅出現在Excel電子表格中的「啞」報告功能)。換句話說,這個特定的請求是有效的,可能需要直接的解決方案而不是解決方法。 – Paurian

+0

謝謝@Paurian。這個解決方案對我來說非常方便。 – phoenix