使用SQL Server,我有…
ID SKU PRODUCT
=======================
1 FOO-23 Orange
2 BAR-23 Orange
3 FOO-24 Apple
4 FOO-25 Orange
我想要的
1 FOO-23 Orange
3 FOO-24 Apple
这个问题并没有让我明白。我如何在一列上选择DISTINCT ?
SELECT
[ID],[SKU],[PRODUCT]
FROM [TestData]
WHERE ([PRODUCT] =
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%'))
ORDER BY [ID]
下面是一个版本,基本上与其他几个答案相同,但是由于一些内联值,您可以将其复制粘贴到SQL server Management Studio中进行测试(并且不会生成任何不需要的表)。
WITH [TestData]([ID],[SKU],[PRODUCT]) AS
(
SELECT *
FROM (
VALUES
(1, 'FOO-23', 'Orange'),
(2, 'BAR-23', 'Orange'),
(3, 'FOO-24', 'Apple'),
(4, 'FOO-25', 'Orange')
)
AS [TestData]([ID],[SKU],[PRODUCT])
)
SELECT * FROM [TestData] WHERE [ID] IN
(
SELECT MIN([ID])
FROM [TestData]
GROUP BY [PRODUCT]
)
结果
ID SKU PRODUCT
1 FOO-23 Orange
3 FOO-24 Apple
我忽略了以下几点…
WHERE ([SKU] LIKE 'FOO-%')
因为这只是作者错误代码的一部分,而不是问题的一部分。这对找这里的人没什么帮助。
下面是一个版本,基本上与其他几个答案相同,但是由于一些内联值,您可以将其复制粘贴到SQL server Management Studio中进行测试(并且不会生成任何不需要的表)。
WITH [TestData]([ID],[SKU],[PRODUCT]) AS
(
SELECT *
FROM (
VALUES
(1, 'FOO-23', 'Orange'),
(2, 'BAR-23', 'Orange'),
(3, 'FOO-24', 'Apple'),
(4, 'FOO-25', 'Orange')
)
AS [TestData]([ID],[SKU],[PRODUCT])
)
SELECT * FROM [TestData] WHERE [ID] IN
(
SELECT MIN([ID])
FROM [TestData]
GROUP BY [PRODUCT]
)
结果
ID SKU PRODUCT
1 FOO-23 Orange
3 FOO-24 Apple
我忽略了以下几点…
WHERE ([SKU] LIKE 'FOO-%')
因为这只是作者错误代码的一部分,而不是问题的一部分。这对找这里的人没什么帮助。
我知道6年前有人问过这个问题,但知识还是知识。
这是不同于上面所有的解决方案,因为我必须在SQL Server 2000下运行它:
DECLARE @TestData TABLE([ID] int, [SKU] char(6), [Product] varchar(15))
INSERT INTO @TestData values (1 ,'FOO-23', 'Orange')
INSERT INTO @TestData values (2 ,'BAR-23', 'Orange')
INSERT INTO @TestData values (3 ,'FOO-24', 'Apple')
INSERT INTO @TestData values (4 ,'FOO-25', 'Orange')
SELECT DISTINCT [ID] = ( SELECT TOP 1 [ID] FROM @TestData Y WHERE Y.[Product] = X.[Product])
,[SKU]= ( SELECT TOP 1 [SKU] FROM @TestData Y WHERE Y.[Product] = X.[Product])
,[PRODUCT]
FROM @TestData X