sql - 从 2 列中的同一字段中选择
问题描述
我想创建一个从两列示例中的同一字段显示的报告:
receipt id infotype information
-----------------------------------------------
1 phone number 123
1 comment no comment
2 phone number 12346
2 any comment price is high
结果 :
receipt id phone number comment
----------------------------------------------
1 123 no comment
2 12346 price is high
我使用此代码,但结果与我需要的不同:
SELECT
RETAILTRANSACTIONINFOCODETRANS.TRANSDATE AS "Date" ,
RETAILTRANSACTIONTABLE.RECEIPTID AS "Receipt number" ,
RETAILTRANSACTIONSALESTRANS.staff As "Staff" ,
RETAILTRANSACTIONTABLE.NETAMOUNT AS "Total" ,
RETAILTRANSACTIONINFOCODETRANS.INFOCODEID AS " Type " ,
RETAILTRANSACTIONINFOCODETRANS.INFORMATION,
MAX(CASE WHEN RETAILTRANSACTIONINFOCODETRANS.INFOCODEID = 'Phone Numb' THEN information END) AS phonenumber,
MAX(CASE WHEN RETAILTRANSACTIONINFOCODETRANS.INFOCODEID LIKE '%Any Commen%' THEN information END) AS comment
FROM
RETAILTRANSACTIONTABLE
INNER JOIN
RETAILTRANSACTIONINFOCODETRANS ON RETAILTRANSACTIONINFOCODETRANS.TRANSACTIONID = RETAILTRANSACTIONTABLE.TRANSACTIONID
INNER JOIN
RETAILTRANSACTIONSALESTRANS ON RETAILTRANSACTIONSALESTRANS.TRANSACTIONID = RETAILTRANSACTIONINFOCODETRANS.TRANSACTIONID
GROUP BY
GROUPING SETS ((RETAILTRANSACTIONINFOCODETRANS.TRANSDATE,
RETAILTRANSACTIONTABLE.RECEIPTID,
RETAILTRANSACTIONSALESTRANS.staff,
RETAILTRANSACTIONTABLE.NETAMOUNT,
RETAILTRANSACTIONINFOCODETRANS.INFORMATION,
RETAILTRANSACTIONINFOCODETRANS.INFOCODEID ),())
解决方案
您可以使用条件聚合
select receiptid,
max(case when infotype='phone number' then information end) as phonenumber,
max(case when infotype like '%comment%' then information end) as comment
from tablename
group by receiptid
推荐阅读
- r - 将带有斜率和误差的箭头添加到 geom_point 图中
- excel - 使用公式将日期格式 m/d/yyyy 更改为 dd/mm/yyyy
- datastage - 是关于 Datastage 消息处理程序的问题吗?
- android - 为什么内存分析器中的“java”部分会消耗大量内存?
- .net - 在数据库优先方法中更新模型实体框架时遇到问题
- swift - 如何在 Swift 中计算颜色合成?
- c# - 在 asp mvc 的 Edit 方法中将新实体添加到列表属性
- sql-server - 从数组中选择值
- javascript - 如何在承诺中获取异步方法返回可用于同步函数的值?
- xml - Zabbix HTTP 代理修剪 xml