sql - 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 中执行此查询。
有任何想法吗?提前致谢!
解决方案
正如我在评论中所说,停止使用隐式连接。现在已经不是 1989 年了: 要改掉的坏习惯:使用老式的 JOIN
这里不需要 2 个不同的SELECT
语句。使用正确的JOIN
andIN
返回数据,并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;
推荐阅读
- python - 无法打开之前打开的 H5
- video-streaming - 带有 iframe 信息的实时 HLS 生成器
- postgresql - 如何正确分组 Postgres 数据
- pandas - 以 pandas 列作为参数调用函数
- excel - VBA - 填充自定义功能区下拉/列表框
- python - 'requests' 导入的模块在 IDLE 上不起作用
- angular - 如何强制 this.gridOption.getRowStyle 函数?
- python - 从表格中排除一些结果-Web Scraping with Python
- postgresql - 从 Postgresql 中的 JSONB 对象中删除键/值
- twitter-bootstrap-3 - 实现多列网格的最佳方法