【问题标题】:Joining two select queries to display the results in a single line from the same table连接两个选择查询以在同一表中的一行中显示结果
【发布时间】:2018-07-09 13:12:34
【问题描述】:

希望是一个简单的,但我需要帮助。

我有两个查询查看相同的数据,但使用不同的 where 语句。 数据显示了交易日不同卡品牌的价值。但是,每个总数都在一个单独的行上,所以我希望在一行上看到所有商店 所以 [LOCATION]、[TRADE DATE]、[VISA]、[AMEX]、[# RECORDS]。

我暂时将查询限制在一个位置。

任何帮助将不胜感激

查询A(签证记录)

SELECT 
 TILLREADREQUEST.STRTRADECODE AS [LOCATION]  
,TILLREADREQUEST.DTMTRADEDATE AS [TRADE DATE]
,SUM(TILLREADDETAIL.CURVALUE) AS [VISA]
,COUNT(TILLREADREQUEST.ctrcode) AS [# RECORDS],

FROM          
 TILLREADDETAIL INNER JOIN
 TILLREADREQUEST ON TILLREADDETAIL.LINTREQUESTCODE = TILLREADREQUEST.CTRCODE
WHERE        (TILLREADDETAIL.INTTENDERCODE IN ('3')) and TILLREADREQUEST.DTMTRADEDATE > getdate()-2 AND STRTRADECODE = 'SHEFFIELD'
group by     TILLREADREQUEST.STRTRADECODE,TILLREADREQUEST.DTMTRADEDATE* 

查询 B(美国运通记录)

SELECT 
 TILLREADREQUEST.STRTRADECODE AS [LOCATION]  
,TILLREADREQUEST.DTMTRADEDATE AS [TRADE DATE]
,SUM(TILLREADDETAIL.CURVALUE) AS [AMEX]


FROM          
 TILLREADDETAIL INNER JOIN
 TILLREADREQUEST ON TILLREADDETAIL.LINTREQUESTCODE = TILLREADREQUEST.CTRCODE
WHERE        (TILLREADDETAIL.INTTENDERCODE IN ('4')) and TILLREADREQUEST.DTMTRADEDATE > getdate()-2 AND STRTRADECODE = 'SHEFFIELD'
group by     TILLREADREQUEST.STRTRADECODE,TILLREADREQUEST.DTMTRADEDATE* 

【问题讨论】:

    标签: sql-server join select


    【解决方案1】:

    在查询中使用CASE查询特定条件:

    SELECT 
     TILLREADREQUEST.STRTRADECODE AS [LOCATION]  
    ,TILLREADREQUEST.DTMTRADEDATE AS [TRADE DATE]
    ,SUM(CASE WHEN TILLREADDETAIL.INTTENDERCODE IN ('3')
       THEN TILLREADDETAIL.CURVALUE
       ELSE 0
       END
    ) AS [VISA]
    ,SUM(CASE WHEN TILLREADDETAIL.INTTENDERCODE IN ('4')
       THEN TILLREADDETAIL.CURVALUE
       ELSE 0
       END
    ) AS [AMEX]
    ,COUNT(TILLREADREQUEST.ctrcode) AS [# RECORDS],
    
    FROM          
     TILLREADDETAIL INNER JOIN
     TILLREADREQUEST ON TILLREADDETAIL.LINTREQUESTCODE = TILLREADREQUEST.CTRCODE
    WHERE        (TILLREADDETAIL.INTTENDERCODE IN ('3', '4')) and TILLREADREQUEST.DTMTRADEDATE > getdate()-2 AND STRTRADECODE = 'SHEFFIELD'
    group by     TILLREADREQUEST.STRTRADECODE,TILLREADREQUEST.DTMTRADEDATE* 
    

    【讨论】:

      【解决方案2】:

      如果您还想单独计算 VISA/AMEX 的记录,那么您还必须在此处添加案例。

      SELECT 
       TILLREADREQUEST.STRTRADECODE AS [LOCATION]  
      ,TILLREADREQUEST.DTMTRADEDATE AS [TRADE DATE]
      ,SUM(CASE WHEN TILLREADDETAIL.INTTENDERCODE IN ('3') THEN TILLREADDETAIL.CURVALUE ELSE 0 END) AS [VISA]
      ,SUM(CASE WHEN TILLREADDETAIL.INTTENDERCODE IN ('4') THEN TILLREADDETAIL.CURVALUE ELSE 0 END) AS [AMEX]
      ,COUNT(CASE WHEN TILLREADREQUEST.ctrcode = '3' THEN 1 ELSE NULL END) AS [# RECORDS],
      ,COUNT(CASE WHEN TILLREADREQUEST.ctrcode = '4' THEN 1 ELSE NULL END) AS [# RECORDS]
      FROM          
       TILLREADDETAIL INNER JOIN
       TILLREADREQUEST ON TILLREADDETAIL.LINTREQUESTCODE = TILLREADREQUEST.CTRCODE
      WHERE        (TILLREADDETAIL.INTTENDERCODE IN ('3','4')) and TILLREADREQUEST.DTMTRADEDATE > getdate()-2 AND STRTRADECODE = 'SHEFFIELD'
      group by     TILLREADREQUEST.STRTRADECODE,TILLREADREQUEST.DTMTRADEDATE*
      

      【讨论】:

        猜你喜欢
        • 2013-01-16
        • 2018-02-24
        • 2014-08-17
        • 2015-04-16
        • 1970-01-01
        • 2022-08-04
        • 2022-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多