Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于多个列(而不是所有列)选择唯一行_C#_Sql_Asp.net - Fatal编程技术网

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