2014-01-14 23 views
0

我想加入三个表使用和内部联接,并有一个更改颜色的内容如果电子邮件已发送。创建INNER加入IIF

下面是我的查询

SELECT IIF(COUNT Holdsent.job)>0, #STD, #RED) AS Colour, jobs.job, jobs.jobstatus, jobs.client, jobs.logdate 
FROM jobs INNER JOIN clients ON clients.client = jobs.client INNER JOIN holdsent ON holdsent.job = jobs.job 
WHERE (jobs.jobstatus = 'HOLD' OR jobs.jobstatus = 'CLIHOLD') 

以下是错误我收到

预期词法元素找不到:(失踪(集合函数 SELECT子句中[解析表达式(列1) ] - 在SQL语句中出现 错误的位置是:1 SELECT IIF(COUNT Holdsent.job)> 0,#STD,#RED)AS COLOR,jobs.job, jobs.jobstatus,jobs.client作业。 logdate FROM jobs INNER JOIN clients ON clients.client = jobs.client INNER JOIN holdsent ON holdsent.job = jobs.job WHERE(jobs.jobstatus = 'HOLD' OR jobs.jobstatus = 'CLIHOLD')

我是新来的SQL并且可以执行基本查询,但在IIF上不明确。提前感谢您提供的任何帮助。

+1

您使用的是MySQL还是SQL Server? –

+0

@GordonLinoff从错误消息我会说这是MS Sql Server ... –

+0

对不起,我们使用的是SQL Server – Aaron

回答

0

对不起,我没有嘲笑了测试表这一点,但我想你想子查询对你holdsent表得到的计数值成主要查询,然后在您的IIF() function中使用三个参数。我没有做一个测试案例,但我认为这将满足您的需求:

SELECT  IIF((isnull(holdsentCount.jobCount,0)>0, #STD, #RED) AS Colour 
      , jobs.job 
      , jobs.jobstatus 
      , jobs.client 
      , jobs.logdate 
FROM  jobs 
JOIN  clients 
ON   clients.client = jobs.client 
LEFT JOIN (select  holdsent.job 
         , count(*) as jobCount 
      from  holdsent 
      group by holdsent.job) as holdsentCount 
ON   holdsentCount.job = jobs.job 
WHERE  (jobs.jobstatus = 'HOLD' OR jobs.jobstatus = 'CLIHOLD') 

而且,包裹holdsentCount.jobCount与ISNULL(),使其返回0,如果没有在子查询返回。

编辑:我不知道'#STD'或'#RED'是什么,所以我就这样离开了他们。

+0

感谢大家的帮助。我能弄明白。 – Aaron

3

iif是MS Access的一个特殊功能,SQL Server已经开始支持最新版本。正确的SQL表单是case声明。您查询的改进版,用标准的SQL是:

SELECT (case when COUNT(hs.job)>0 then #STD else #RED end) AS Colour, 
     j.job, j.jobstatus, j.client, j.logdate 
FROM jobs j INNER JOIN 
    clients c 
    ON c.client = j.client INNER JOIN 
    holdsent hs 
    ON hs.job = j.job 
WHERE j.jobstatus in ('HOLD', 'CLIHOLD') 
+1

由于OP使用'WHERE(jobs.jobstatus ='HOLD'或jobs.jobstatus ='CLIHOLD')'不应该是:'WHERE j.jobstatus IN('HOLD','CLIHOLD')' –

+0

@AndrewBickerton 。 。 。谢谢。固定。 –

+0

这两个都不一样吗? –