根据多个列选择唯一行但不是全部

时间:2016-06-20 21:45:27

标签: c# sql asp.net

我正在尝试对表格进行排序,以便根据两个不同的列(MODEL_NUMBER和YEAR_INTRODUCED)显示重复项目

现在我的查询设计如下:

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;";

以下是表格布局:

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

ARCHIVE_ID是主键。我应该使用一组吗?如果我使用ARCHIVE_ID将保留的组?

1 个答案:

答案 0 :(得分:2)

取决于您希望的结果集。

如果结果集只包含MODEL_NUMBER和YEAR_INTRODUCED,则只需使用distinct:

SELECT DISTINCT 
     MODEL_NUMBER, 
     YEAR_INTRODUCED 
FROM ARCHIVE_DECADE_TBL

如果希望结果集包含其他列,则必须确定要显示的值。由于每个唯一配对只有一行,因此您只能显示其他列中的一个值。你想出现哪一个?值是否需要来自同一行?

您可以执行类似

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

...如果您不关心这些值是否来自同一行。

如果你关心,你必须做一些更复杂的事情,比如

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