C# 基于多个列(而不是所有列)选择唯一行
我正在尝试对表格进行排序,以便根据两个不同的列(型号和年份)不显示重复项 现在,我的查询设计如下:C# 基于多个列(而不是所有列)选择唯一行,c#,sql,asp.net,C#,Sql,Asp.net,我正在尝试对表格进行排序,以便根据两个不同的列(型号和年份)不显示重复项 现在,我的查询设计如下: 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;"; 存档ID是主键。我应该使用分组方式吗?如果我确实
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;";
存档ID是主键。我应该使用分组方式吗?如果我确实使用了一个组,那么归档ID将保留在哪个组中 取决于您希望的结果集 如果结果集仅包含引入的型号和年份,则只需使用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
取决于您希望的结果集 如果结果集仅包含引入的型号和年份,则只需使用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
它取决于存档id将保留的聚合函数(min,max,count,…)。它取决于存档id将保留的聚合函数(min,max,count,…)。当我尝试第二个选项时,查询将列名从LOCATION更改为Expr1000,您知道如何解决此问题吗?您需要添加列别名,例如,如果要命名列MIN_LOCATION,请使用
SELECT MIN(LOCATION)MIN_LOCATION FROM etc
当我尝试第二个选项时,查询会将列名从LOCATION更改为Expr1000,您知道如何解决此问题吗?您需要添加列别名,例如,如果要命名列MIN_LOCATION,可使用从etc中选择MIN(LOCATION)MIN_LOCATION