2

以下の 2 つの SQL クエリで完全結合を実行しようとしています。

最初のクエリ:

SELECT
    ID
    ,SUM(CASE WHEN reason = 4 THEN 0 ELSE quantity*price END) AS TValue
    ,COUNT(*) AS CountAll
FROM table1
WHERE Date>=@StartDate AND Date<=@EndDate
GROUP BY ID

2 番目のクエリ:

SELECT
    ID
    ,SUM(CASE WHEN reason = 1 THEN 1 ELSE 0 END) AS New
    ,SUM(CASE WHEN reason = 6 THEN 1 ELSE 0 END) AS Amend
    ,SUM(CASE WHEN reason = 5 THEN 1 ELSE 0 END) AS Cancel
FROM Table2
WHERE Date2 >=@StartDate AND Date2<= @EndDate
GROUP BY ID

query1 の結果

ID   CountAll     TValue    
-------------------------
id1     24         1020      
id2     13         2030      
id3      4          120    

クエリ 2 の結果:

ID     New     Amend     Cancel
--------------------------------
id1    12         4         6
id2     7         6         1
id4     2         1         2

必要な出力:

ID     TValue     CountAll     New    Amend    Cancel   Total(countall+new+amend+cancel)
----------------------------------------------------------------------------------------
Id1    1020          24        12       4         6        46
Id2    2030          13         7       6         1        27
id3     120           4         0       0         0         4
Id4       0           0         2       1         2         5

リクエストがあれば、現在のソリューションを投稿しますが、うまくいきません。

私は少し調査を行ってきましたが、ユニオンを作成して ID に参加するか、完全に参加する必要があると思います。(SQLを実行して2日目)

4

3 に答える 3

2

これを試して、

SELECT *
FROM
(
    SELECT  ID ,
            SUM(CASE WHEN reason = 4 THEN 0 ELSE quantity*price END) AS TValue,
            COUNT(*) AS CountAll
    FROM    table1
    WHERE   Date>=@StartDate AND Date<=@EndDate
    GROUP BY ID
) a FULL JOIN
(
    SELECT  ID ,
            SUM(CASE WHEN reason = 1 THEN 1 ELSE 0 END) AS New ,
            SUM(CASE WHEN reason = 6 THEN 1 ELSE 0 END) AS Amend ,
            SUM(CASE WHEN reason = 5 THEN 1 ELSE 0 END) AS Cancel
    FROM Table2
    WHERE Date2 >=@StartDate AND Date2<= @EndDate 
    GROUP BY ID
) b ON a.ID = b.ID
于 2012-10-12T01:23:34.907 に答える
1

これを試しましたか...

select isnull (a.id,b.id) as ID, a.TValue, CountAll, b.new, b.Amend, b.cancel   
from (SELECT ID ,SUM(CASE WHEN reason = 4 THEN 0 ELSE quantity*price END) AS TValue ,COUNT(*) AS CountAll         
                FROM table1          
                WHERE Date>=@StartDate AND Date<=@EndDate GROUP BY ID         ) a 
                FULL OUTER JOIN (SELECT ID , SUM(CASE WHEN reason = 1 THEN 1 ELSE 0 END)  AS New ,SUM(CASE WHEN reason = 6 THEN 1 ELSE 0 END) AS Amend , SUM(CASE WHEN reason = 5 THEN 1 ELSE 0 END) AS Cancel       
                FROM Table2 WHERE Date2 >=@StartDate AND Date2<= @EndDate GROUP BY ID         ) b  on a.id = b.id 
于 2012-10-12T06:16:05.150 に答える
1

私は以下のようなものを書きます:

select decode (a.id, null, b.id, a.id) as ID, a.TValue, CountAll, b.new, b.Amend, b.cancel 
   from (SELECT ID ,SUM(CASE WHEN reason = 4 THEN 0 ELSE quantity*price END) 
         AS TValue ,COUNT(*) AS CountAll 
         FROM table1 
         WHERE Date>=@StartDate AND Date<=@EndDate GROUP BY ID
        ) a FULL OUTER JOIN
        (SELECT ID , SUM(CASE WHEN reason = 1 THEN 1 ELSE 0 END) 
            AS New ,SUM(CASE WHEN reason = 6               
            THEN 1 ELSE 0 END) AS Amend , 
            SUM(CASE WHEN reason = 5 THEN 1 ELSE 0 END) AS Cancel
            FROM Table2 WHERE Date2 >=@StartDate AND Date2<= @EndDate GROUP BY ID
        ) b
     on a.id = b.id
于 2012-10-12T01:28:43.870 に答える