首页 > 解决方案 > SQL 信息显示在一行中

问题描述

SELECT CA.MEMBER_ID,
    0 AS TRANSFERRED_SHARES ,
    SUM(CA.NUMBER_OF_SHARES) AS PURCHASED_SHARES, 
    '-' AS DELETED_SHARES
FROM COS_APPLICATIONS CA , COS_APPL_DETAILS CAD
WHERE APPL_TYPE =2
    AND CA.APPLICATION_ID = CAD.APPLICATION_ID
    AND CA.SERVICE_PRODUCT = 38002
    AND CAD.TRX_TYPE = 'INITIAL'
    AND CAD.TRX_UNIT = 143
    GROUP BY CA.MEMBER_ID
UNION ALL
SELECT CA.MEMBER_ID,
    SUM(CA.NUMBER_OF_SHARES) AS TRANSFERRED_SHARES, 
    0 AS PURCHASED_SHARES ,
    '-' AS DELETED_SHARES
FROM COS_APPLICATIONS CA , COS_APPL_DETAILS CAD
WHERE APPL_TYPE =5
   AND CA.APPLICATION_ID = CAD.APPLICATION_ID
   AND CA.SERVICE_PRODUCT = 38002
   AND CAD.TRX_TYPE = 'INITIAL'
   AND CAD.TRX_UNIT = 143 
   GROUP BY CA.MEMBER_ID
   ORDER BY CA.MEMBER_ID

我得到以下结果:

我的问题是,当会员同时转让和购买股票时,我想要一行中的信息,而不是单独的。例如,ID 为 63 的成员有 31 股已转让股票和 50 股已购买。我的查询给了我 2 行:第一个有 0 表示已转让,50 表示已购买,第二个有 31 表示已转让,0 表示已购买购买。我想要的是这些信息显示在一行中。

不幸的是,我还不能附上任何图片。

笔记!我在 SQL Server 2012 中执行此查询。

有任何想法吗?提前致谢!

标签: sqlsql-servergroup-by

解决方案


正如我在评论中所说,停止使用隐式连接。现在已经不是 1989 年了: 要改掉的坏习惯:使用老式的 JOIN

这里不需要 2 个不同的SELECT语句。使用正确的JOINandIN返回数据,并CASE在您的 : 中使用一个简单的表达式SUM

SELECT CA.MEMBER_ID,
       SUM(CASE APPL_TYPE WHEN 5 THEN CA.NUMBER_OF_SHARES END) AS TRANSFERRED_SHARES, --APPL_TYPE is missing table alias
       SUM(CASE APPL_TYPE WHEN 2 THEN CA.NUMBER_OF_SHARES END) AS PURCHASED_SHARES, --APPL_TYPE is missing table alias
       '-' AS DELETED_SHARES
FROM COS_APPLICATIONS CA
     JOIN COS_APPL_DETAILS CAD ON CA.APPLICATION_ID = CAD.APPLICATION_ID
WHERE APPL_TYPE IN (2, 5) --APPL_TYPE is missing table alias
  AND CA.SERVICE_PRODUCT = 38002
  AND CAD.TRX_TYPE = 'INITIAL'
  AND CAD.TRX_UNIT = 143
GROUP BY CA.MEMBER_ID
ORDER BY CA.MEMBER_ID;

推荐阅读