2017-04-26 27 views
0

分組數據被多次引用

Store Grupa \t Quantity \t Value   \t ITTYPE 
 
1   A1 \t -44128 \t  -101409.6   100 
 
1   B1 \t -50000 \t  -1500   \t 101 
 
1   E1 \t -32560 \t  -53720.62 \t 100 
 
1   C1 \t -54730 \t  -29006.9 \t   101 
 
1   D1 \t -45720 \t  -37033.2 \t   101 
 
1   E1 \t -370500 \t  -171100.61 \t 100 
 
2   E1 \t -370500 \t  -227038.7 \t   101 
 
2   C1 \t -37152 \t  -18575.94 \t   100 
 
2   C1 \t -145980 \t  -52261.57 \t   100 
 
2   B1 \t -75600 \t  -40639.65  \t 100 
 
2   B1 \t -69750 \t  -64170 \t   100

而且我想通過存儲和GRUPA

<!-- begin snippet: js hide: false console: true babel: false -->

分組而且我想通過存儲和分組Grupa

ITTYPE \t     100 \t    100 \t  101  \t 101 
 
Store \t Grupa \t Quantity  \t Value   \t Quantity \t Value 
 
1 \t  A1 \t -44,128.00  \t -101,409.60  \t -  \t -  
 
1 \t  B1   \t  -  \t -   \t -50,000.00 \t -1,500.00  
 
1    C1 \t    -  \t -   \t -54,730.00 \t -29,006.90  
 
1    D1 \t    -   -   \t -45,720.00 -37,033.20  
 
1 \t  E1 \t -403,060.00  \t -224,821.23  \t -  \t -  
 
2 \t  A1 \t   -  \t  -   \t -  \t -  
 
2 \t  B1 \t -145,350.00  \t -104,809.65  \t -  \t -  
 
2    C1 \t -183,132.00  \t -70,837.51  \t -  \t -  
 
2 \t  D1 \t   -  \t  -   \t -  \t -  
 
2 \t  E1 \t   -    \t -  \t -370,500.00 -227,038.70

它就像一個SUMIFS通過商店,GRUPA並且還通過ITTYPE

+0

你應該發佈一些代碼。但是,也許一個'分組集'是你可以使用? https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx – Kosch

回答

0

你可以嘗試這樣的事:

WITH RawData AS (
    SELECT 1 AS Store, 'A1' AS Grupa, -44128 AS Quantity, -101409.6 AS [Value], 100 AS ITTYPE 
    UNION ALL 
    SELECT 1, 'B1', -50000, -1500, 101 
    UNION ALL 
    SELECT 1, 'E1', -32560, -53720.62, 100 
    UNION ALL 
    SELECT 1, 'C1', -54730, -29006.9, 101 
    UNION ALL 
    SELECT 1, 'D1', -45720, -37033.2, 101 
    UNION ALL 
    SELECT 1, 'E1', -370500, -171100.61, 100 
    UNION ALL 
    SELECT 2, 'E1', -370500, -227038.7, 101 
    UNION ALL 
    SELECT 2, 'C1', -37152, -18575.94, 100 
    UNION ALL 
    SELECT 2, 'C1', -145980, -52261.57, 100 
    UNION ALL 
    SELECT 2, 'B1', -75600, -40639.65, 100 
    UNION ALL 
    SELECT 2, 'B1', -69750, -64170, 100), 
Store AS (
    SELECT DISTINCT Store FROM RawData), 
Grupa AS (
    SELECT DISTINCT Grupa FROM RawData) 
SELECT 
    s.Store, 
    g.Grupa, 
    SUM(CASE WHEN r.ITTYPE = 100 THEN r.Quantity END) AS [100_Quantity], 
    SUM(CASE WHEN r.ITTYPE = 100 THEN r.[Value] END) AS [100_Value], 
    SUM(CASE WHEN r.ITTYPE = 101 THEN r.Quantity END) AS [101_Quantity], 
    SUM(CASE WHEN r.ITTYPE = 101 THEN r.[Value] END) AS [101_Value] 
FROM 
    Store s 
    CROSS JOIN Grupa g 
    LEFT JOIN RawData r ON r.Store = s.Store AND r.Grupa = g.Grupa 
GROUP BY 
    s.Store, 
    g.Grupa 
ORDER BY 
    1,2; 

注意到,如果你有100多家ITTYPES和101那麼你可能更適合動態的PIVOT?

結果是:

Store Grupa 100_Quantity 100_Value 101_Quantity 101_Value 
1  A1  -44128   -101409.60 NULL   NULL 
1  B1  NULL   NULL  -50000   -1500.00 
1  C1  NULL   NULL  -54730   -29006.90 
1  D1  NULL   NULL  -45720   -37033.20 
1  E1  -403060   -224821.23 NULL   NULL 
2  A1  NULL   NULL  NULL   NULL 
2  B1  -145350   -104809.65 NULL   NULL 
2  C1  -183132   -70837.51 NULL   NULL 
2  D1  NULL   NULL  NULL   NULL 
2  E1  NULL   NULL  -370500   -227038.70 
0

試試這個:

DECLARE @table TABLE (
Store INT,Grupa NVARCHAR(5), Quantity DECIMAL(10,2), Value DECIMAL(10,2), ITTYPE INT) 
INSERT INTO @table VALUES 
(1   ,'A1', -44128  ,-101409.6  ,100), 
(1   ,'B1', -50000  ,-1500   ,101), 
(1   ,'E1', -32560  ,-53720.62  ,100), 
(1   ,'C1', -54730  ,-29006.9  ,101), 
(1   ,'D1', -45720  ,-37033.2  ,101), 
(1   ,'E1', -370500  ,-171100.61 ,100), 
(2   ,'E1', -370500  ,-227038.7  ,101), 
(2   ,'C1', -37152  ,-18575.94  ,100), 
(2   ,'C1', -145980  ,-52261.57  ,100), 
(2   ,'B1', -75600  ,-40639.65  ,100), 
(2   ,'B1', -69750  ,-64170  ,100) 

SELECT Store ITTYPE,Grupa Grupa,SUM(CASE WHEN ITTYPE = 100 THEN Quantity ELSE '0' END) Quantity, 
           SUM(CASE WHEN ITTYPE = 100 THEN Value ELSE '0' END) Value, 
           SUM(CASE WHEN ITTYPE = 101 THEN Quantity ELSE '0' END) Quantity, 
           SUM(CASE WHEN ITTYPE = 101 THEN Value ELSE '0' END) Value 
FROM @table GROUP BY Store,Grupa ORDER BY Store,Grupa 

希望它能幫助。 :)