简体   繁体   English

根据多列而不是全部选择唯一的行

[英]Selecting unique rows based on multiple columns but not all

I am trying to sort a table so that duplicates dont show up on it based on two different columns (MODEL_NUMBER and YEAR_INTRODUCED) 我正在尝试对表格进行排序,以免基于两个不同的列(MODEL_NUMBER和YEAR_INTRODUCED)在其上显示重复项

Right now my query is designed like: 现在我的查询设计为:

cmd = @"Select * From ARCHIVE_DECADE_TBL WHERE DECADE_" + decade + @"=@decade AND PRODUCT_LINE=@Line AND QUANTITY is not null AND QUANTITY <> 0 ORDER BY PRODUCT_NAME;";

Here is the table layout: 这是表格布局:

ARCHIVE_ID    MODEL_NUMBER    YEAR_INTRODUCED    LOCATION
1001          B10             1989               SKID 43
1002          B10             1989               SKID 48
1003          B10             1989               SKID 73

The ARCHIVE_ID is the primary key. ARCHIVE_ID是主键。 Should I use a group by? 我应该使用分组方式吗? If I do use a group by which ARCHIVE_ID would stay? 如果我使用一个将保留ARCHIVE_ID的组?

Depends on the result set that you wish. 取决于您想要的结果集。

If the resultset only contains MODEL_NUMBER and YEAR_INTRODUCED, you can simply use distinct: 如果结果集仅包含MODEL_NUMBER和YEAR_INTRODUCED,则可以简单地使用distinct:

SELECT DISTINCT 
     MODEL_NUMBER, 
     YEAR_INTRODUCED 
FROM ARCHIVE_DECADE_TBL

If you want the resultset to include other columns, you have to decide which values you want to show up. 如果希望结果集包括其他列,则必须决定要显示哪些值。 Since you only have one row per unique pairing, you can only show one value from the other columns. 由于每个唯一配对只有一行,因此只能显示其他列中的一个值。 Which one do you want to show up? 您想出现哪一个? And do the values need to come from the same row? 值是否需要来自同一行?

You could do something like 你可以做类似的事情

SELECT   MIN(ARCHIVE_ID), 
         MODEL_NUMBER, 
         YEAR_INTRODUCED, 
         MIN(LOCATION)
FROM     ARCHIVE_DECADE_TBL 
GROUP BY MODEL_NUMBER, 
         YEAR_INTRODUCED

...if you don't care if the values come from the same row. ...如果您不在乎值是否来自同一行。

If you do care, you have to do something a little more complicated, such as 如果您确实在乎,则必须做一些更复杂的事情,例如

SELECT A.* 
FROM   ARCHIVE_DECADE_TBL A
JOIN   (SELECT   MIN(ARCHIVE_ID), 
                 MODEL_NUMBER, 
                 YEAR_INTRODUCED 
        FROM     ARCHIVE_DECADE_TBL 
        GROUP BY MODEL_NUMBER, 
                 YEAR_INTRODUCED) B
ON     A.ARCHIVE_ID = B.ARCHIVE_ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM