我有一个select *查询,它提供了很多行和很多结果列。当给出与另一列B相同的值时,我有一个问题是一列A的重复,我想只包括其中一列。
基本上我有一个专栏告诉我" name"对象和另一个告诉我"数字"。有时我有一个对象" name"对于给定对象有多个条目" number"。我只想要不同的数字"在一个"名称"但我希望查询在这是真的时给出整个表,而不仅仅是这两列。
Name Number ColumnC ColumnD
Bob 1 93 12
Bob 2 432 546
Bob 3 443 76
上面这个例子很好
Name Number ColumnC ColumnD
Bob 1 93 12
Bob 2 432 546
Bill 1 443 76
Bill 2 54 1856
上面这个例子很好
Name Number ColumnC ColumnD
Bob 1 93 12
Bob 2 432 546
Bob 2 209 17
上面这个例子不太好,我只想要其中一个Bob 2。
答案 0 :(得分:1)
如果您使用的是SQL 2005或更高版本,请尝试使用它:
With ranked_records AS
(
select *,
ROW_NUMBER() OVER(Partition By name, number Order By name) [ranked]
from MyTable
)
select * from ranked_records
where ranked = 1
答案 1 :(得分:0)
使用公用表表达式(CTE)和ROW_NUMBER OVER PARTITION语法如下:
WITH
CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Name, Number ORDER BY Name, Number) AS R
FROM
dbo.ATable
)
SELECT
*
FROM
CTE
WHERE
R = 1
答案 2 :(得分:0)
如果您只想要姓名和号码,那么
SELECT DISTINCT Name, Number FROM Table1
如果你想知道每个中有多少,那么
SELECT Name, Number, COUNT(*) FROM Table1 GROUP BY Name, Number
答案 3 :(得分:0)
使用
CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Plant, BatchNumber ORDER BY Plant, BatchNumber) AS R
FROM dbo.StatisticalReports WHERE dbo.StatisticalReports. \!"FermBatchStartTime\!" >= DATEADD(d,-90, getdate())
)
选择
*
FROM
CTE
WHERE
R = 1
ORDER BY dbo.StatisticalReports.Plant,dbo.StatisticalReports.FermBatchStartTime