2017-04-25 62 views
0

我正在爲某些計數編寫select語句。SQL選擇查詢出現問題

這樣:

Select JobType, count(JobType) as count from PrintJobs with (nolock) 
where JobType in (1, 2, 3, 4) 
and convert(datetime, TimeSubmitted) > cast(CAST(dateadd(dd, -1,GETDATE()) as date) as datetime) + CAST('17:30:00.000' as time) 
group by JobType 

的問題是,當什麼也不顯示了JobTypes表看起來像這樣

JobTypes | count | 
------------------| 
    2  1 | 
    3  2 | 
__________________| 

有沒有辦法讓它像這樣:

JobTypes | count | 
------------------| 
    1  0 | 
    2  1 | 
    3  2 | 
    4  0 | 
__________________| 

這樣即使工作類型的結果中沒有任何結果,它仍然顯示出來嗎?我試圖使這一動態地在jobtypes可以在C#中的SQL參數設定的時間提前

感謝

+0

你有一個JobType列表嗎? –

+0

你在使用什麼平臺? – Hogan

+0

我沒有任何類型的表格,但我總是可以從用戶的參數中創建它。我試圖將其轉換爲存儲過程並在C#中運行它。我比C#更熟悉C#,所以它會導致一些問題 –

回答

1

一種解決方案是left join

Select j.JobType, count(pj.JobType) as count 
from (values (1), (2), (3), (4)) j(jobtype) left join 
    PrintJobs pj 
    on pj.JobType = j.jobType and 
     convert(datetime, TimeSubmitted) > cast(CAST(dateadd(day, -1,GETDATE()) as date) as datetime) + CAST('17:30:00.000' as time) 
group by j.JobType 
+0

到目前爲止,這是最好的答案,唯一的問題是當jobtype結果爲0時,我回來的表顯示爲1而不是0 –

+0

@MatthewSehorn。 。 。有一個錯字。正確的'count()'是'count(pj.jobtype)'。 –

1

在SQL Server像這個:

Select JTS.JobType, count(*) as count 
from (
    SELECT 1 as JT 
    UNION ALL 
    SELECT 2 as JT 
    UNION ALL 
    SELECT 3 as JT 
    UNION ALL 
    SELECT 4 as JT 
) AS JTS 
LEFT JOIN PrintJobs AS P with (nolock) ON P.JobType = JTS.JT 
     AND convert(datetime, P.TimeSubmitted) > cast(CAST(dateadd(dd, -1,GETDATE()) as date) as datetime) + CAST('17:30:00.000' as time) 
group by P.JobType 

在這裏你創建一個類型和連接的表。

+0

我遇到了與此相同的問題...如果結果爲空,表格爲空白。即使值爲0,Gordon Linoff的答案也給了我一張表格,其中的工作類型即使值爲0.他唯一的問題是,如果工作類型的結果爲0,他的表格會將其顯示爲1 –

+0

@MatthewSehorn您需要說平臺 - 我的是SQL服務器他是oracle/db2 – Hogan

+0

@MatthewSehorn - 是的,我看到問題將'WHERE'更改爲'AND' - 標準需要成爲左連接的一部分。看到? – Hogan

1
Select JTypes.JType, count(P.JobType) as count 
from (
SELECT 1 as JType 
UNION ALL 
SELECT 2 as JType 
UNION ALL 
SELECT 3 as JType 
UNION ALL 
SELECT 4 as JType 
) AS JTypes 
    LEFT JOIN PrintJobs AS P ON P.JobType = JTypes.JType 
    WHERE convert(datetime, P.TimeSubmitted) > cast(CAST(dateadd(dd, -1,GETDATE()) as date) as datetime) + CAST('17:30:00.000' as time) 
group by JTypes.JType 
+0

我遇到與此相同的問題...如果結果爲空,表格爲空白。 Gordon Linoff的答案給了我一個表格,其中的工作類型即使值爲0.他唯一的問題是,如果工作類型的結果爲0,他的表格會顯示它爲1 –

+0

@MatthewSehorn,如果沒有值在PrintJobs表中,您的預期輸出是什麼? –

+0

0將是我正在尋找的答案。如果你看看我的問題中的兩個示例表,第一個顯示了我目前正在獲取哪些只是printjobs有一個計數的行。我正在尋找的第二個表格將printjobs顯示爲0,它的值爲0.希望這是有道理的! –