我正在尝试对表格进行排序,以便根据两个不同的列(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将保留的组?
答案 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