2012-12-20 214 views
2

我想弄清楚如何完成我的查詢。任何幫助將不勝感激!SQL 2 where子句

這就是我正在使用的這一點。

SELECT 
    co, queuedTime, startTime, completeTime, 
    DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime 
FROM 
    SJob 
WHERE 
    jobClass = 'PayrollFinish' 
    AND DATEDIFF(DAY, queuedTime, GETDATE()) = 0 
ORDER BY 
    queuedTime 

唯一的問題是我需要queuedTime其中job class = submitpayrollcompleteTime其中jobclass = payrollfinish

我是新來的SQL和通過只是一種翻閱我的方式。

+0

你能給一個樣本數據和預期結果的例子嗎? – drneel

+0

你也可以給出'SJob'的模式嗎?數據如何與'SJob'中的不同記錄相關聯。換句話說,'co'引用相同的行/實體,但只是使用不同的'jobClass'? – SPFiredrake

回答

1

所以你查詢會看起來像這樣?

SELECT 
    co, 
    queuedTime, 
    startTime, 
    completeTime, 
    DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime 
FROM 
    SJob 
WHERE 
    jobClass = 'PayrollFinish' AND 
    DATEDIFF(DAY,queuedTime,GETDATE())=0 
    and jobClass = 'submitpayroll' AND jobclass = 'payrollfinish' 
ORDER BY 
    queuedTime 
+0

'jobClass'不能同時爲'SubmitPayroll'和'PayrollFinish'。沒有記錄將被退回。 – SPFiredrake

0

如果你只想要其中的一個時間,那麼這應該做的伎倆。

SELECT co, 
     CASE time 
      WHEN jobClass = 'SubmitPayroll' THEN queuedTime 
      WHEN jobClass = 'PayrollFinish' AND DATEDIFF(DAY, queuedTime, GETDATE()) = 0 THEN completeTime 
      ELSE 'N/A' 
     END, 
     startTime, 
     DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime 
    FROM SJob 
ORDER BY queuedTime 
0

考慮到它,因爲我假設你想要來自兩個不同記錄的數據。

SELECT 
    js.co, 
    js.queuedTime, 
    js.startTime, 
    je.completeTime, 
    DATEDIFF(MINUTE, js.queuedTime, je.completeTime) AS elapsedTime 
FROM 
    SJob js 
    JOIN SJob je ON js.co = je.co -- Assuming this is the joining column 
    JOIN (SELECT 
      CAST(CONVERT(VARCHAR(50), GETDATE(), 101) AS DATETIME) StartDate, 
      CAST(CONVERT(VARCHAR(50), GETDATE() + 1, 101) AS DATETIME) EndDate) AS date 
     ON ((js.queuedTime >= date.StartDate AND js.queuedTime < date.endDate) OR 
      (je.queuedTime >= date.StartDate AND je.queuedTime < date.endDate)) 
WHERE 
    js.jobClass = 'SubmitPayroll' AND 
    je.jobClass = 'PayrollFinish' 
ORDER BY 
    js.queuedTime 

首先,因爲他們似乎是兩個獨立的記錄,你需要打表兩次(一次爲SubmitPayroll,以及其他爲PayrollFinish記錄。因爲我不知道您的架構的樣子,我把一個鏡頭哪個柱連接起來。

其次,我不知道您是否希望無論工作已經開始或那一天內完成,因爲SubmitPayrollPayrollFinish記錄是不同的。

三,如果你想返回所有提交無論它們是否具有匹配的完成記錄,只需將JOIN SJob je轉換爲LEFT OUTER JOIN即可獲得所需的內容(儘管您還需要在DATEDIFF中爲je.completeTime設置ISNULL

同樣,這是一個黑暗中的鏡頭,沒有關於您的模式/數據的更多信息,但希望這可以讓您更接近您所需的內容。