2015-05-19 39 views
0

我試圖寫一個查詢,有效地,結合了下面兩個查詢,但我認爲我有作家阻止。我試過寫一個子查詢,但無濟於事。我已經考慮過一個交叉表查詢,但我想避免任何特定的Access。我試過了一個聯盟,但是這似乎也不起作用。我高度懷疑這只是我的垃圾。我很想嘗試一下SQL PIVOT,但是我之前沒有嘗試過,並且根據我今天的行程來判斷,我懷疑我會成功。計數值的數量並返回一個列作爲

無論如何,這對我的工作的查詢是:

SELECT Operative.NAME, COUNT(*) AS [Yes to Left Tidy?] 
FROM Operative INNER JOIN ([Survey Results] INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
WHERE Q5 = 'yes' 
GROUP BY Operative.NAME 

SELECT Operative.NAME, COUNT(*) AS [No to Left Tidy?] 
FROM Operative INNER JOIN ([Survey Results] INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
WHERE Q5 = 'no' 
GROUP BY Operative.NAME 

如果你要我詳細的表結構等,請讓我知道。

+0

你嘗試的聯合查詢,併發生了什麼? –

+0

我想他希望Operative.NAME,count(no),count(是)在一行中,提供q5的表上的雙連接就足夠了,儘管 –

+0

可以給我們你的表結構和預期的查詢結果請@馬特 –

回答

0

你嘗試這個

select * FROM 
    (SELECT Operative.NAME, COUNT(*) AS [Yes to Left Tidy?],'YES' AS Y/N 
    FROM Operative INNER JOIN ([Survey Results] 
    INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) 
    ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
    WHERE Q5 = 'yes' 
    GROUP BY Operative.NAME)A, 
    UNION 
    (SELECT Operative.NAME, COUNT(*) AS [Yes to Left Tidy?],'NO' AS Y/N 
    FROM Operative INNER JOIN ([Survey Results] 
    INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) 
    ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
    WHERE Q5 = 'no' 
    GROUP BY Operative.NAME)B 
0

好像要組由Q5,如:

SELECT Operative.NAME, Q5 [Left Tidy?], COUNT(*) 
FROM Operative INNER JOIN ([Survey Results] INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
WHERE Q5 IN ('yes', 'no') 
GROUP BY Q5, Operative.NAME 

..如果你想要一個對每行數,你可以把這些結果,並它們的樞軸,例如:

SELECT * FROM (
SELECT Operative.NAME, Q5 [Left Tidy?], COUNT(*) c 
FROM Operative INNER JOIN ([Survey Results] INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
WHERE Q5 IN ('yes', 'no') 
GROUP BY Q5, Operative.NAME) p 
PIVOT (SUM(c) FOR [Left Tidy?] IN ([no], [yes])) x; 
0

在標準的SQL這將是SUM(CASE WHEN Q5 = 'yes' THEN 1 ELSE 0 END),這簡單地總結一個或零基於o情況。 Access不支持CASE,但IIF應該提供相同的結果:

SELECT Operative.NAME, 
    SUM(IIF(Q5 = 'yes', 1, 0)) AS [Yes to Left Tidy?], 
    SUM(IIF(Q5 = 'no', 1, 0)) AS AS [No to Left Tidy?] 
FROM Operative INNER JOIN ([Survey Results] INNER JOIN JOBS ON [Survey Results].Job_Number = JOBS.Job_Number) ON Operative.USERID = JOBS.SCHEDULEITEMS_ASSIGNEDWORKERID 
WHERE Q5 IN ('yes', 'no') -- only needed if other values exist 
GROUP BY Operative.NAME 
相關問題