Sql server 2005 尝试筛选重复项时出现T-SQL独特列问题

Sql server 2005 尝试筛选重复项时出现T-SQL独特列问题,sql-server-2005,tsql,distinct-values,Sql Server 2005,Tsql,Distinct Values,我有以下数据 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

我有以下数据

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作为MYTable中的COL3不起作用是SQL SERVER

尽管我确信某些SQL向导能够构造一种方法来实现这一点,我觉得有必要指出,从概念上讲,这是没有意义的——第3列的行中的值与第1列和第2列中的行值完全无关

您不能在单独的查询中简单地返回COL2的不同值吗

SELECT DISTINCT COL2 FROM MyTable

请注意,您可以从单个SQL查询返回多个结果集,也可以使用CTE创建一个行号并连接这些虚拟列

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
试试这个

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

这真的很不寻常,我不明白你为什么要把它放在一个结果集中,因为它没有任何意义。。。没有理由将不同查询中的行与非不同查询中的行相关联,但您只需运行两个查询

Select Col1, Col2 From Table
Order By Col1, Col2

并将它们连接在一起,以在行编号上连接它们,在每个查询中添加一个行编号函数:

   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

我想使用COL3中的不同值作为SSRS 2005报告中参数的可用值。我本来可以添加一个单独的查询,但不幸的是,我必须在一个数据集中执行此操作,因为SQLServer2005ReportingServices不允许在一个rdl报表中包含多个数据集。在一个SSRS 2005报表数据集中是否可能有两个单独的查询?@Name.IsNullOrEmpty-我明白了,我想建议一个替代方案,但是我对SSRS不太熟悉。Col3仍然返回重复的值IDNLT没有意识到这一点,但出于某种原因,行数函数在查询中有一个独特的。。。已还原为旧式行号子查询表达式…我收到错误,无法绑定多部分标识符T2.Col2。在这一行,这里是Col2,现在尝试一下,应该是Col2
   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