如何在SQL Server中使用不同的表的所有列

时间:2014-09-02 11:04:19

标签: sql asp.net sql-server

我想获得独特的价值表单。但所有价值观都应该是唯一的。

所以建议如何获得。

SELECT DISTINCT ProCode
           , id,SubCat
           ,SmlImgPath
           ,RupPrice
           ,ActualPrice
           ,ProName
 FROM product
 WHERE ProCode='FZ10003-EBA';

3 个答案:

答案 0 :(得分:0)

DISTINCT指的是所有选定的列,所以答案是你的SELECT已经这样做了。

编辑:

您的问题似乎与DISTINCT无关。你想要的是当你的搜索返回多行时获得一行。

如果你不关心你得到哪一行,那么你可以使用:

MS SQL Server语法:

SELECT TOP 1  ProCode
           , id,SubCat
           ,SmlImgPath
           ,RupPrice
           ,ActualPrice
           ,ProName
 FROM product
 WHERE ProCode='FZ10003-EBA';

MYSQL语法:

SELECT ProCode
           , id,SubCat
           ,SmlImgPath
           ,RupPrice
           ,ActualPrice
           ,ProName
 FROM product
 WHERE ProCode='FZ10003-EBA'
 LIMIT 1;

Oracle语法:

SELECT ProCode
           , id,SubCat
           ,SmlImgPath
           ,RupPrice
           ,ActualPrice
           ,ProName
 FROM product
 WHERE ProCode='FZ10003-EBA'
   AND rownum <= 1;

答案 1 :(得分:0)

(有一天我可以发表评论!)

SQLFiddle to show normal, distinct and returning a single row

SELECT DISTINCT工作正常,但它不能按照您希望的方式工作。根据您在Klas回答中的评论中发布的数据,当列中某处存在数据差异时,很明显您期望得到单个结果。例如

    /Products/CELEBRITY/KANGANA

完全是来自

的DISTINCT
    /Products/SALWAR

您正在寻找的内容无法与DISTINCT一起使用,也无法与GROUP BY一起使用。基本上,只有两行(或三行,或十行或100行)成为一行的唯一方法是SELECT中所有七列中的数据都是IDENTICAL。

退后一步,想想它是什么,确切地说,你想要在这里实现。

答案 2 :(得分:0)

您是说只想要一个记录吗?这称为聚合。如果有一个记录,那么一个(在你的例子中为三个),你必须决定每一列,显示哪个值。

您希望在结果行中看到哪个SubCat,SmlImgPath等?最大值?最低?或者字符串&#39;各种&#39;?一个例子:

SELECT 
    ProCode
  , CASE WHEN MIN(id) <> MAX(id) THEN 'various' ELSE MIN(id) END
  , MIN(SubCat)
  , MAX(SmlImgPath)
  , AVG(RupPrice)
  , AVG(ActualPrice)
  , MAX(ProName)
FROM product
WHERE ProCode='FZ10003-EBA'
GROUP BY ProCode;