这个主题似乎有点出现,但我找到的答案都没有对我有用。
我想连接两个表来获取表DAYS中的所有值,这是一列数字1到30以及一个列连接来自第二个表的值的列,如下所示:
Ref Week_Comm Date Name Adj_Type Hours Description Sick_Note Deleted
223 04-Apr-17 04-Apr-17 Joe Bloggs Absence 4 Sickness RECD
112 04-Apr-17 05-Apr-17 Joe Bloggs Absence 7 Sickness RECD
196 04-Apr-17 06-Apr-17 Joe Bloggs Absence 7 Sickness RECD
197 11-Apr-17 11-Apr-17 Fred Flintstone Holiday 7
我想要的结果看起来像这样:
Day April
1
2
3
4 A 4Hrs
5 A 7Hrs
6 A 7Hrs
7
8
etc to 30
连接工作正常,但我只能从与右表匹配的地方得到结果。
我在Excel VBA中创建SQL作为字符串并使用ODBC连接返回数据。这些表包含在同一个电子表格中。
我的第一次尝试如下
SELECT DAYS.Day, (LEFT(DATA.Adj_Type,1) + ' ' + Cstr(DATA.Hours) + ' Hrs') as April
FROM DAYS
LEFT OUTER JOIN DATA ON (DAYS.Day = DAY(DATA.Date)
WHERE (MONTH(DATA.Date)=4) AND (DATA.Deleted Is Null) AND (DATA.Name='Joe Blogs'))
ORDER BY DAYS.Day
这给了我一个内连接的结果,即它不会返回我左表DAYS中的所有值
在此论坛上对类似问题的回答后,我尝试将AND替换为AND,如下所示
SELECT DAYS.Day, (LEFT(DATA.Adj_Type,1) + ' ' + Cstr(DATA.Hours) + ' Hrs') as April
FROM DAYS
LEFT OUTER JOIN DATA ON ((DAYS.Day = DAY(DATA.Date)
AND (MONTH(DATA.Date)=4) AND (DATA.Deleted Is Null) AND (DATA.Name='Joe Blogs'))
ORDER BY DAYS.Day
这不返回数据,我收到错误“JOIN EXPRESSION NOT SUPPORTED”
然后我尝试为我的表选择我想要的数据然后加入它们:
SELECT DAYS.Day
FROM DAYS AS A
LEFT JOIN (SELECT DAY(DATA.Date) AS Day, (LEFT(DATA.Adj_Type,1) + ' ' + Cstr(DATA.Hours) + ' Hrs') as April
FROM DATA
WHERE (MONTH(DATA.Date)=4) AND (DATA.Deleted Is Null) AND (DATA.Name='Joe Blogs')) as B
ON A.Day = B.Day
我收到错误消息
FROM子句中的语法错误
我哪里错了?我对这一切都非常新手,并通过谷歌获取我的大部分信息
提前致谢 - 贾斯汀
编辑我已经删除了额外的别名(如上所述),但仍然得到相同的结果。
答案 0 :(得分:0)
您的第二个查询是在正确的轨道上,只有MONTH(DATA.Date)=4
无法在加入条件中使用。而是将其移回WHERE子句,如下所示:
WHERE (MONTH(DATA.Date)=4 OR DATA.Date IS NULL)
答案 1 :(得分:0)
现在已经解决了。我的问题中的第二个SQL语句实际上是正确的,但是因为它将左表中的空数据转换为我的连接字符串,所以它没有带来任何数据,因为"无效使用null"错误。我原以为串联工作正常,但这只是在通过错误使用WHERE排除Null数据的语句中。
这是我的最终代码。
SELECT DAYS.Day, IIF(DATA.Hours is null, DATA.Hours, (LEFT(DATA.Adj_Type,1) + ' ' + Cstr(DATA.Hours) + ' Hrs'))
FROM DAYS LEFT OUTER JOIN DATA ON (DAYS.Day = DAY(DATA.Date) AND (MONTH(DATA.Date)=4) AND (DATA.Deleted Is Null) AND (DATA.Name='Joe Bloggs'))
ORDER BY DAYS.Day
希望将来可以帮助其他人。