![](/img/trans.png)
[英]Finding Difference between two rows grouped by a date or between two pivoted columns
[英]To find difference between two pivoted columns in sql
select count(*) AS id_CNT, Date, price
from table
where Date in ('2019-12-18', '2019-12-19')
and Id = '-3'
group by Date, price
pivot
(max(price) for date in (['2019-12-18'], ['2019-12-19']) piv)
我已经尝试过这个脚本,但下一步是什么才能获得此处显示的所需输出:
t
)ID = '-3'
引号 Date in ('2019-12-18', '2019-12-19')
使用Date in ('2019-12-18', '2019-12-19')
是多余的,所以去掉它们
旋转部分的别名应该在右括号之后
所以,使用这个查询:
SELECT piv.*, [2019-12-19] - [2019-12-18] as Diff
FROM
(
SELECT ID, Date, Price, COUNT(*) AS ID_Cnt
FROM tab
WHERE ID = -3
GROUP BY ID, Date, price
) t
PIVOT
(
MAX(Price) for Date in ( [2019-12-18], [2019-12-19] )
) piv
从包含方括号中的in
运算符之后的文字的查询格式中,我认为您的 DBMS 是SQL-Server 。
当只有 2 个日期时,您真的不需要 PIVOT 然后 UNPIVOT 来获得最终结果。
样本数据:
create table YourTable ( Id int not null, [Date] date not null, price decimal(16,2) not null ) insert into YourTable (id, [date], price) values (-3, '2019-12-18', 94416.68), (-3, '2019-12-19', 31352.26);
询问:
WITH CTE_DATA AS ( SELECT Id, [Date] , id_count = COUNT(*) , price = SUM(price) , rn = ROW_NUMBER() OVER (PARTITION BY Id ORDER BY [Date] DESC) FROM YourTable WHERE Id = -3 AND [Date] IN ('2019-12-18', '2019-12-19') GROUP BY Id, [Date] ) SELECT [Date], Id , CAST(id_count AS VARCHAR(30)) AS id_count , price FROM CTE_DATA UNION ALL SELECT null, null, 'Result' , (MAX(CASE WHEN rn=1 THEN price END) - MAX(CASE WHEN rn=2 THEN price END)) FROM CTE_DATA GROUP BY Id ORDER BY Id desc, [Date] GO
\n日期 | 身份证 | id_count | 价钱 \n :------------------ | ---: | :------- | :--------\n 18/12/2019 00:00:00 | -3 | 1 | 94416.68 \n 19/12/2019 00:00:00 | -3 | 1 | 31352.26 \n空| 空| 结果 | -63064.42\n
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.