2010-07-21 39 views
1

當T-SQL鮮明列的問題,我有以下數據想篩選重複了

COL-1  COL-2 

1  0TY/OK 
1  0TY/OK 
1  0TY/OK 
1  0TY/OK 
1  0TY/OK 
2  2KP/L   
2  2KP/L 
2  2KP/L 
2  2KP/L  
2  2KP/L  
3  7U5/2M 
3  7U5/2M 
3  7U5/2M 
3  7U5/2M 

,我想構建一個select查詢檢索下面的輸出數據

COL-1  COL-2  COL-3 

1  0TY/OK  0TY/OK 
1  0TY/OK  2KP/L 
1  0TY/OK  7U5/2M 
1  0TY/OK 
1  0TY/OK 
2  2KP/L   
2  2KP/L 
2  2KP/L 
2  2KP/L  
2  2KP/L  
3  7U5/2M 
3  7U5/2M 
3  7U5/2M 
3  7U5/2M 

我希望COL3返回COL2的不同值。

使用SELECT COL1, COL2, DISTINCT COL2 AS COL3 FROM MYTable不起作用的是SQL SERVER

回答

1

儘管我確定某些SQL嚮導能夠構建一種方法來實現這一點,但我覺得有必要指出在概念上這沒有任何意義 - 第3列的行中的值完全無關列1和列2中的行值。

您是否可以不簡單地在單獨的查詢中返回COL2的不同值?

SELECT DISTINCT COL2 FROM MyTable 

(請注意,您可以從一個單一的SQL查詢返回多個結果)

+0

我想用不同的值COL3作爲SSRS 2005報告中參數的可用值。 我可以添加一個單獨的查詢,但不幸的是,我必須在一個數據集中執行此操作,因爲SQL Server 2005報告服務不允許在單個rdl報告中使用多個數據集。 是否可以在單個SSRS 2005報告數據集中有兩個單獨的查詢? – StackTrace 2010-07-21 13:49:45

+0

@ Name.IsNullOrEmpty - 我明白了,我想推薦一個替代方案,但我不熟悉SSRS。 – Justin 2010-07-21 14:01:56

0

可以使用的CTE來創建一個ROW_NUMBER並加入了這些虛擬列。

DECLARE @t TABLE (
    Col1 INT 
    ,Col2 VARCHAR(10) 
); 

INSERT INTO @t VALUES (1, '0TY/OK'); 
INSERT INTO @t VALUES (1, '0TY/OK'); 
INSERT INTO @t VALUES (1, '0TY/OK'); 
INSERT INTO @t VALUES (1, '0TY/OK'); 
INSERT INTO @t VALUES (1, '0TY/OK'); 
INSERT INTO @t VALUES (2, '2KP/L,'); 
INSERT INTO @t VALUES (2, '2KP/L'); 
INSERT INTO @t VALUES (2, '2KP/L'); 
INSERT INTO @t VALUES (2, '2KP/L'); 
INSERT INTO @t VALUES (2, '2KP/L'); 
INSERT INTO @t VALUES (3, '7U5/2M'); 
INSERT INTO @t VALUES (3, '7U5/2M'); 
INSERT INTO @t VALUES (3, '7U5/2M'); 
INSERT INTO @t VALUES (3, '7U5/2M'); 

; WITH all_data AS (
    SELECT 
     Col1 
     ,Col2 
     ,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum 
    FROM @t 
), 
distinct_data AS (
    SELECT 
     Col2 
     ,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum 
    FROM @t 
    GROUP BY 
     Col2 
) 
SELECT 
    all_data.Col1 
    ,all_data.Col2 
    ,distinct_data.Col2 
FROM all_data 
    LEFT JOIN distinct_data ON all_data.RowNum = distinct_data.RowNum 
0

嘗試了這一點..

WITH MyTable AS 
(
    SELECT 1 Col1,CONVERT (VarChar (25), '0TY/OK') Col2 UNION ALL 
    SELECT 1,'0TY/OK' UNION ALL 
    SELECT 1,'0TY/OK' UNION ALL 
    SELECT 1,'0TY/OK' UNION ALL 
    SELECT 1,'0TY/OK' UNION ALL 
    SELECT 2,'2KP/L' UNION ALL 
    SELECT 2,'2KP/L' UNION ALL 
    SELECT 2,'2KP/L' UNION ALL 
    SELECT 2,'2KP/L' UNION ALL 
    SELECT 2,'2KP/L' UNION ALL 
    SELECT 3,'7U5/2M' UNION ALL 
    SELECT 3,'7U5/2M' UNION ALL 
    SELECT 3,'7U5/2M' UNION ALL 
    SELECT 3,'7U5/2M' 
) 
, 
AllData AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (ORDER BY Col2) as Id 
    FROM MyTable 
) 
, 
DistinctData AS 
(
     SELECT 
      Distinct Col2 AS Col3 
     FROM MyTable 
), 
DistinctWithRowNumber AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (ORDER BY Col3) as Id 
    FROM DistinctData 
) 
SELECT 
    Col1, 
    Col2, 
    Col3 
FROM AllData 
    LEFT JOIN DistinctWithRowNumber 
     ON AllData.Id = DistinctWithRowNumber.Id 

返回此結果

Col1  Col2      Col3 
----------- ------------------------- ------------------------- 
1   0TY/OK     0TY/OK 
1   0TY/OK     2KP/L 
1   0TY/OK     7U5/2M 
1   0TY/OK     NULL 
1   0TY/OK     NULL 
2   2KP/L      NULL 
2   2KP/L      NULL 
2   2KP/L      NULL 
2   2KP/L      NULL 
2   2KP/L      NULL 
3   7U5/2M     NULL 
3   7U5/2M     NULL 
3   7U5/2M     NULL 
3   7U5/2M     NULL 
1

這真是不尋常的,我不明白爲什麼你要這樣一個結果集,因爲它沒有任何意義......沒有理由將不同查詢的行與非獨立查詢中的行相關聯,但是您必須執行的操作是簡單地運行這兩個查詢

Select Col1, Col2 From Table 
Order By Col1, Col2 

而且

Select Distinct Col2 From Table 

,並加入他們一起(加入他們的行號,添加一個ROW_NUMBER()函數每個查詢:

Select Col1, Col2, Col3 
    From (Select Row_Number() Over(Order By Col1, Col2)RowNum, 
       Col1, Col2 
      From Table) T1 
    Left Join 
      (Select Distinct Col2 As Col3, 
      (Select Count(Distinct Col2) 
      From Table 
      Where Col2 <= T2.Col3) RowNum      
      From Table) T2 
     On T2.RowNum = T1.RowNum 
+0

Col3仍然返回重複值 – StackTrace 2010-07-21 14:01:56

+0

Didnlt意識到這一點,但由於某種原因,Row_Number函數與查詢中的Distinct h ... ...恢復到舊式Row Number子查詢表達式.... – 2010-07-21 14:29:13

+0

我得到錯誤「The multi-part標識符「T2.Col2」無法綁定。「在這條線, (其中col2的<= T2.Col2)ROWNUM) – StackTrace 2010-07-22 06:27:47