我想获得独特的价值表单。但所有价值观都应该是唯一的。
所以建议如何获得。
SELECT DISTINCT ProCode
, id,SubCat
,SmlImgPath
,RupPrice
,ActualPrice
,ProName
FROM product
WHERE ProCode='FZ10003-EBA';
答案 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;