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