我有多个联接查询通过6个表,我需要从同一个查询获取与上一年值的新列。由于在论坛上的常见答案,这个想法是正确的,但不知何故,我的结果只发现在同一年的价值(如果我在条件下手动取代它),但不是以前的一个....加入多联接选择
我错过了什么?
- 列名被翻译,所以我希望没有语法错误
- 目的:MS SSRS 2014报告>的选择和上年度比较值 - 例如二千〇一十七分之一VS二千〇一十六分之一
- 在我使用(年,年-1)条件下的参数原始查询
查询:
SELECT
,Table6_Date.DateCode
,Table6_Date.MonthX
,Table6_Date.YearX
,Table5.PK_Table5
,Table5.CategoryName as [Table5_CategoryName]
,Table4.PK_Table4
,Table4.Name AS [Table4_Name]
,Table3.Id
,Table3.Ave --Main Number Values
,Table3.Ots --Main Number Values
,Table3.Favourability --Main Number Values
,Table2_Country.PK_Table2_Country
,Table2_Country.Name AS [Table2_Country_Name]
,Table1.PK_table1
,Table1.FK_Table2_Country
,Table1.LongDate
FROM
Table1
INNER JOIN Table2_Country
ON Table1.FK_Table2_Country = Table2_Country.PK_Table2_Country
LEFT OUTER JOIN Table3
ON Table1.PK_Table1 = Table3.FK_Table1
RIGHT OUTER JOIN Table4
ON Table3.FK_Table4 = Table4.PK_Table4
LEFT OUTER JOIN Table5
ON Table5.PK_Table5 = Table4.FK_Table5
LEFT OUTER JOIN Table6_Date
ON (concat(YEAR([table1].[LongDate]),'M',(Format(Month([table1].[LongDate]),'00')))) = Table6_Date.DateCode
--there comes the problem part with "Self-Join"--
--LEFT JOIN
-- (
-- SELECT * --i use columns namely, but for shorter example "*"
-- FROM
-- Table1 Table1_LY
-- INNER JOIN Table2_Country Table2_Country_LY
-- ON Table1_LY.FK_Table2_Country = Table2_Country_LY.PK_Table2_Country
-- LEFT OUTER JOIN Table3 Table3_LY
-- ON Table1_LY.PK_Table1 = Table3_LY.FK_Table1
-- RIGHT OUTER JOIN Table4 Table4_LY
-- ON Table3_LY.FK_Table4 = Table4_LY.PK_Table4
-- LEFT OUTER JOIN Table5 Table5_LY
-- ON Table5_LY.PK_Table5 = Table4_LY.FK_Table5
-- LEFT OUTER JOIN Table6_Date Table6_Date_LY
-- ON (concat(YEAR([table1_LY].[LongDate]),'M',(Format(Month([table1_LY].[LongDate]),'00')))) = Table6_Date_LY.DateCode
-- WHERE
-- Table2_Country_LY.PK_Table2_Country = 20
-- AND Table6_Date_LY.YearX = 2016
-- AND Table6_Date_LY.monthX = 1
-- ) LastYearTable
-- ON LastYearTable.PK_table1 = Table1.PK_table1
-- AND LastYearTable.Id = table3.Id
-- AND LastYearTable.PK_table4 = table4.PK_table4
-- AND LastYearTable.FK_table5 = table4.FK_table5
-- AND LastYearTable.PK_Table2_Country = Table2_Country_LY.PK_Table2_Country
--End Of SelfJoin--
WHERE
Table2_Country.PK_Table2_Country = 20 --(20=France) --
AND Table6_Date.YearX = 2017
AND Table6_Date.monthX = 1
预览输出(没有我的新加入)(2017年和2016年):
DateCode MonthX YearX PK_table5 CategoryName PK_Table4 Table4_Name Id Ave Ots Favourability PK_Table2_Country Table2_CountryName PK_table1 FK_Table2_Country LongDate
2017M01 1 2017 1 Print 4 Articles 160 100000 4000000 NULL 20 France 147 20 2017-01-01 00:00:00.0000000
2017M01 1 2017 2 Media 8 Billboards 169 1000000 4900000 50 20 France 147 20 2017-01-01 00:00:00.0000000
2017M01 1 2017 1 Print 4 Articles 161 200000 4100000 NULL 20 France 148 20 2017-01-01 00:00:00.0000000
2017M01 1 2017 2 Media 5 Television 162 300000 4200000 NULL 20 France 148 20 2017-01-01 00:00:00.0000000
2017M01 1 2017 2 Media 6 RadioXYZ 163 400000 4300000 NULL 20 France 148 20 2017-01-01 00:00:00.0000000
2017M01 1 2017 2 Media 8 Billboards 168 900000 4800000 100 20 France 148 20 2017-01-01 00:00:00.0000000
----------- --------- ------ ----------- ---------------- ------------ -------------- ---- -------- ---------- ------- ---- -------- ----- ---- --------------
2016M01 1 2016 1 Print 4 Articles 164 500000 4400000 NULL 20 France 149 20 2016-01-01 00:00:00.0000000
2016M01 1 2016 2 Media 8 Billboards 165 600000 4500000 100 20 France 149 20 2016-01-01 00:00:00.0000000
2016M01 1 2016 1 Print 4 Articles 166 700000 4600000 NULL 20 France 150 20 2016-01-01 00:00:00.0000000
2016M01 1 2016 2 Media 8 Billboards 167 800000 4700000 100 20 France 150 20 2016-01-01 00:00:00.0000000
EDIT1:错字删除
尝试'AND Table6_Date> ='2016-01-01'' – samosaris
我想在同一行中获取当前和去年,我之前已经完成了另一个项目,但所有左连接,所以它工作轻松和罚款。我试图复制相同的逻辑,但不成功,所以这就是我选择这种类型的逻辑的原因。 – Popkornak
注释过的代码是否曾经工作,以及您想要现在做什么? – samosaris