我有一个包含以下列的数据库
SKU | designID | designColor | width | height | price | etc.
SKU
号码是唯一的,designID
会重复。
基本上,我希望DISTINCT
或GROUP BY
设计ID并获取行的其余部分的值,即使它们没有重复。
示例:
123 | A-1 | RED | 2 | 3 | $200 | etc.
135 | A-2 | BLU | 8 | 4 | $150 | etc.
毕竟,我应该可以通过任一列对它们进行排序。我已经尝试了GROUP BY
和DISTINCT
但是没有它们返回行的其余值。
示例:
SELECT DISTINCT designID
FROM tbl_name
将返回
A-1
A-2
,没有其他数据。
GROUP BY
示例:
SELECT designID, designColor
FROM tbl_name
GROUP BY designID, designColor
将返回
A-01 | RED
A-02 | BLU
任何想法,所以我可以得到所有行值的DISTINCT结果吗?
提前致谢。
====================================
感谢大家所有的时间和提示,请让我描述一下;
基本上我需要消除重复的designID并只显示其中一个,并且它们中的哪一个,第一个,中间或最后一个并不重要。重要的是我展示的必须包含所有行信息,如SKU,价格,尺寸等。我不知道,也许我应该使用不同的代码而不是DISTINCT或GROUP BY。
这是我想要的数据库。
答案 0 :(得分:5)
除非我误解,否则您可以在多列上SELECT DISTINCT
:
SELECT
DISTINCT designID,
designColor,
width,
height,
price
FROM tbl_name
ORDER BY designColor
这将为您提供所有唯一的行。例如,如果您有15个总行中的两个designID
值,分别有2个和3个不同的designColor
值,则会为您提供5行。
答案 1 :(得分:2)
如果他们都保证重复(100%即所有列),那么一个独特的将是你的朋友。即
SELECT DISTINCT design_id, designColor, width, height, price FROM tbl_name
除了SKU之外,这将为除了SKU之外的所有内容提供不同的值(这将永远是唯一的,并且会影响您的不同。
如果您想要唯一的designId值并且其他结果不同,那么您需要确定所需的值。如果你真的不在乎,你可以随意挑选和聚合函数(比方说,MIN)并使用GROUP BY
即。
SELECT designID, MIN(designColor) FROM tbl_name GROUP BY designID
这将为您提供唯一的设计ID和其他列的 a 值。
如果你想要最大偏斜的designID,你可以使用排名函数,即
;WITH rankedSKUs
AS
(
SELECT SKU, ROW_NUMBER() OVER(ORDER BY SKU DESC) as id
FROM tbl_name
)
SELECT *
FROM tbl_name T
WHERE EXISTS(SELECT * FROM rankedSKUs where id = 1 and SKU = T.sku)
这将返回每个不同designID的所有列,将SKU的最大值作为每个设计的权威。
答案 2 :(得分:2)
如果您不在意返回哪一行,可以使用MAX
和subquery-group by:
create table #test(
SKU int,
designID varchar(10),
designColor varchar(10),
width int,
height int,
price real,
etc varchar(50)
)
insert into #test values(123, 'A-1' ,'RED', 2, 3, '200', 'etc')
insert into #test values(135, 'A-2' ,'BLUE', 8, 4, '150', 'etc')
insert into #test values(128, 'A-2' ,'YELLOW', 6, 9, '300', 'etc')
select t.* FROM #test t INNER JOIN
(
SELECT MAX(SKU) as MaxSKU,designID
FROM #test
GROUP BY designID
) tt
ON t.SKU = tt.MaxSKU;
drop table #test;
结果:
SKU designID designColor width height price etc
123 A-1 RED 2 3 200 etc
135 A-2 BLUE 8 4 150 etc
答案 3 :(得分:0)
如果你想要返回每个字段,你也可以删除distinct
(假设你看起来像id
)。
你的请求真的很奇怪,因为如果你说,
SELECT DISTINCT designID
FROM tbl_name
您将获得一个唯一设计ID列表,如果您在表格中查找具有这些ID的所有行,您将获得表格中的每一行。
作为旁注,使用distinct
通常意味着您设计的数据库非常糟糕(即未规范化)或您设计的查询非常糟糕(即,您知道,真的严重)。我的钱是前者。
答案 4 :(得分:0)
如果您使用LINQ,您可以使用以下内容:
get_data_context().my_table.GroupBy( t => t.designID ).Select( t => new { t.Key,
REST = t.Select( u => new { u.SKU , u.designID , u.designColor , u.width ,
u.height , u.price } ) } );