2013-03-12 44 views
0

我正在使用SQL Server管理Studio 2010.SQL查詢計數和標籤如果第一

我需要我的查詢來填充列如果記錄包含第一次出現的值。

我的查詢返回的表是巨大的,所以我就用假裝列跨越我的觀點。我的查詢目前返回一個表,看起來像這樣

| ROW | ItemNumber | DateOpen | Status | 
| 1 |  10045 | 5/5/2005 | Open | 
| 2 |  10045 | 5/5/2005 | Open | 
| 3 |  10046 | 5/5/2005 | Open | 
| 4 |  10046 | 5/5/2005 | Open | 
| 5 |  10046 | 5/5/2005 | Open | 

我已經添加了一排指示燈,以查詢以爲這將有助於確定ItemNumber的第一次出現。我需要的是標誌着一個X的新列,如果該記錄是第一次出現。

我有這個迄今爲止

DECLARE @ItemData Table(itemRow BIGINT, itemNumber BIGINT, DateOpen VARCHAR(15), status VARCHAR(15)) 
INSERT INTO @ItemData (itemRow, ItemNumber, DateOpen, Status) 
SELECT Row_Number() OVER(ORDER BY Cm_ItemNumber) AS 'ROW' 
     ,Cm_ItemNumber       AS ItemNumber 
     ,Dates_DateOpen       AS DateOpen 
     ,St_Status        AS Status 
FROM db_Items 
JOIN db_Dates ON Dates_Item = Cm_ItemID 
JOIN db_Status ON St_ID = Cm_StatusID 
Select * from @ItemData 

原因其扔進然後seperately選擇一個表,因爲實際上有查詢工會和更多的東西,當我意識到我需要做的唯一檢查器和它添加到列,我想最簡單的方法將是一個「事後」式的東西,它會進入Select * from @ItemData部分。使用現有查詢作爲第2個熱膨脹係數

+0

是基於中第一次出現行或日期是否打開? – 2013-03-12 19:18:23

+0

根據行號。我可能沒有貼上標籤。具體行沒關係,我只需要只標一次,想通通過添加行號一個獨特的記錄,這將使它更容易的每個項目數。 – 2013-03-12 20:16:13

回答

1

我沒有測試過這一點,但它一起我會跟你玩遊戲的線是...

With AllData as 
(
SELECT Row_Number() OVER(ORDER BY Cm_ItemNumber) AS 'ROW' 
     ,Cm_ItemNumber       AS ItemNumber 
     ,Dates_DateOpen       AS DateOpen 
     ,St_Status        AS Status 
FROM db_Items 
JOIN db_Dates ON Dates_Item = Cm_ItemID 
JOIN db_Status ON St_ID = Cm_StatusID 
), 
FirstRows as 
(
SELECT Min(ROW) as Row, ItemNumber 
FROM AllData 
GROUP BY ItemNumber 
) 
SELECT 
    ad.*, 
    Case When fr.Row IS NULL then '' else 'X' end as X_Col 
FROM AllData ad LEFT JOIN FirstRows fr 
    ON ad.ROW=fr.Row 
+0

這似乎已經完成了帽子戲法。謝謝! – 2013-03-12 20:32:41

+0

我會批准你的編輯'案件當fr.row是NULL然後',如果我能解決如何:)我似乎沒有任何批准或拒絕點擊! – 2013-03-12 20:46:01