假设我们有这样的数据表
+----------------+------------+-------+
| Company_number | Date | Value |
+----------------+------------+-------+
| 123 | 2017-01-01 | 5 |
| 123 | 2017-02-01 | 10 |
| 123 | 2018-01-01 | 15 |
| 456 | 2018-01-05 | 33 |
+----------------+------------+-------+
如何以格式
接收数据+----------------+------+------------+------------+
| Company_number | Mont | Value 2017 | Value 2018 |
+----------------+------+------------+------------+
| 123 | 01 | 5 | 15 |
| 123 | 02 | 10 | |
| 456 | 01 | 33 | |
+----------------+------+------------+------------+
我不知道如何选择2017年的所有数据,并使用公司编号和月份与2018年的数据进行连接。
我已经从2017年获取了所有记录,将其放入另一个表中,并尝试使用此选择,但在没有常见月份时没有显示记录(2月没有记录)。
select
s.company_number
,datepart(month,s.date) as Month
,s.Value as Value_2017
,r.Value as Value_2018
from table1 as s
left join table2 as r on concat(r.company_number,datepart(month,r.date))=concat(s.company_number,datepart(month,s.date))
where datepart(year,s.date)='2018'
select results (with no February)
+----------------+-------+------------+------------+
| company_number | Month | Value_2017 | Value_2018 |
+----------------+-------+------------+------------+
| 123 | 1 | 15 | 5 |
| 456 | 1 | 33 | NULL |
+----------------+-------+------------+------------+
答案 0 :(得分:6)
试试这个:
DECLARE @t1 TABLE (Company_number INT, [Date] Date, Value INT)
DECLARE @t2 TABLE (Company_number INT, [Date] Date, Value INT)
INSERT INTO @t1 VALUES (123, '2017-01-01', 5), (123, '2017-02-01', 10)
INSERT INTO @t2 VALUES (123, '2018-01-01', 15), (456, '2018-01-05', 33)
SELECT
COALESCE([t1].Company_number, [t2].Company_number) AS [Company_Number],
MONTH(COALESCE([t1].[date], [t2].[date])) AS [Month],
[t1].[value] AS [2018 Value],
[t2].[value] AS [2017 Value]
FROM
@t1 AS [t1]
FULL OUTER JOIN
@t2 as [t2] on [t1].[company_number] = [t2].[company_number]
AND MONTH([t1].[date]) = MONTH ([t2].[date])
刚尝试过(可以在编辑器中复制/粘贴并执行)并且工作正常:
pip install cx_oracle==5.1.3
答案 1 :(得分:1)
这是在2017年和2018年的同一张桌子上使用CTE而不是两张桌子。
With tmp as (Select company_id,
Datepart(year,dte)作为年份, Datepart(月,dte)作为月份, 总和(值)作为值 来自tbl 按group_id分组, Datepart(年,dte), Datepart(月,dte)) 选择coalesce(m.company_id,n.company_id)作为company_id, coalesce(m.month,n.month)作为月份, m.value as value_2017, n.value as value_2018 从(选择*来自tmp 年份= 2017年)m 全外连接(从tmp中选择*) 年份= 2018年)n 在m.company_id = n.company_id上 和m.month = n.month
Result:
company_number month Value_2017 Value_2018
123 1 5 5
123 2 10 (null)
456 1 (null) 23