sql - 两个查询的完全连接

标签 sql sql-server-2008

我正在尝试对两个 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

第二个查询:

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

查询 1 的结果

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'S,要么只是进行完全加入。 (做sql的第二天)

最佳答案

试试这个,

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

关于sql - 两个查询的完全连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850937/

相关文章:

sql - 删除超过一天的项目 - SQL Server

sql - MS SQL服务器: Reference WHERE statement stored in table?

sql - 摆脱重复值 - SQL Server

sql - 比较sql server中两个字符串中的数字

sql - 如何合并两个没有公共(public)列字段的表?

sql - 清理SQL数据

sql - 将日期范围参数传递给 Rails 中的 SQL/ActiveRecord 查询

php - 无组织的表

sql-server-2008 - 将图像数据类型转换为 Varchar

sql-server-2008 - 在 2 :00 a. m 处自动执行脚本?