我有一個查詢應該返回「status」--duration條目的總和。持續時間通過使用datediff計算(n,datestamp,(返回結束當前狀態的日期戳記的子查詢,即發現下一個配件「狀態更改」 - 在鎖定的那個之後進入)在子查詢中帶有多部分標識符問題的SQL查詢
我的問題是以下查詢返回的多部分的標識符錯誤
- 的INC表給我 「INCIDENT_NUMBER」我正在尋找至極的其他表中相關 「NUMBER」
- ACTM1保存所有DATESTAMP-條目
- ACTA1與ACTM1通過「THENU」 MBER」,並保存有關條目是否是一個裝配狀態更改或不是所有的信息
代碼:
SELECT SUM(DATEDIFF(n, ACTM1.DATESTAMP, END_DATESTAMP_TABLE.END_DATESTAMP))
FROM INC LEFT OUTER JOIN
ACTM1 ON INC.INCIDENT_NUMBER = ACTM1.NUMBER LEFT OUTER JOIN
ACTA1 ON ACTM1.THENUMBER = ACTA1.THENUMBER LEFT OUTER JOIN
/**/
(SELECT ACTM1_1.NUMBER, ACTM1_1.DATESTAMP AS END_DATESTAMP
FROM ACTM1 AS ACTM1_1 LEFT OUTER JOIN
/**/
(SELECT ACTM1_1_1.NUMBER, MIN(ACTM1_1_1.THENUMBER) AS FOLLOWUP_THENUMBER
FROM ACTM1 AS ACTM1_1_1
WHERE (ACTM1_1_1.THENUMBER > /**/ ACTM1_1.THENUMBER)/*I think here lies the problem*/
AND (ACTM1_1_1.[TYPE] IN ('Open', 'Status Change', 'Resolved', 'Closed')))
AS FOLLOWUP_THENUMBER_TABLE
/**/
ON ACTM1_1.NUMBER = FOLLOWUP_THENUMBER_TABLE.NUMBER)
AS END_DATESTAMP_TABLE
/**/
ON ACTM1.NUMBER = END_DATESTAMP_TABLE.NUMBER
WHERE ...
我將是任何有幫助的評論感謝或暗示你能給我這個,
PS
其實它確實有道理。有時會有多個「適合」狀態更改條目。這些條目按照時間順序排列爲「THENUMBER」......無論如何感謝您的進一步幫助。 – Per 2009-12-03 18:04:30
我不是從商業的角度來看,而是從SQL的角度來看。您不能將聚合函數與非聚合字段(即ACTM1_1_1.Number)混合在一起,並且不會有group by子句。 – 2009-12-03 18:17:59
你可能想要的是'(SELECT TOP(1)NUMBER,THENUMBER ... ORDER BY THENUMBER ASC)' – 2009-12-03 18:19:04