SQL从一列中选择非重复项

时间:2014-05-16 22:59:13

标签: sql tsql

我对SQL很新,我有点卡住了。我正在尝试编写一个SQL,它将获得应用于滚轮的所有完成。每个轮子都有很多饰面,每个饰面都有不同角度的许多图像。

This is my code:
    SELECT DISTINCT
    wi.intFinishID,
    wi.blnDefaultFinish
FROM tbl_wheelimage wi
WHERE wi.intwheelID = 4950
ORDER BY wi.blnDefaultFinish DESC

我遇到的问题是,对于默认的完成,它输出2个recods(见下文):默认值和非默认值。我只需要默认值。

intFinishID       blnDefaultFinish
  10                1
  10                0
  1658              0

我正在使用SQL Server 2008

谢谢

PS:

我想要的结果是:

intFinishID       blnDefaultFinish
  10                1
  1658              0

2 个答案:

答案 0 :(得分:1)

SELECT
    wi.intFinishID,
    MAX(convert(tinyint, wi.blnDefaultFinish)) blnDefaultFinish
FROM tbl_wheelimage wi
WHERE wi.intwheelID = 4950
group by intFinishID

你不能在位字段上使用MAX(),所以我先将它转换为tinyint。

这是另一种选择:

SELECT distinct
    wi.intFinishID,
    case when exists(select * from tbl_wheelimage t where t.intWheelID = wi.intWheelId and t.intFinishID = wi.intFinishID and blnDefaultFinish = 1) then 1 else 0 end blnDefaultFinish
FROM tbl_wheelimage wi
WHERE wi.intwheelID = 4950

另一种选择:

select intFinishId, blnDefaultFinish
from
(SELECT 
    ROW_NUMBER() over(partition by wi.intFinishId order by wi.intFinishId asc, wi.blnDefaultFinish desc) rowNum,
    wi.intFinishID,
    wi.blnDefaultFinish
FROM tbl_wheelimage wi
WHERE wi.intwheelID = 4950) x
where x.rowNum = 1

如果您有大量记录,第一个和第三个选项可能会表现最佳。

答案 1 :(得分:-1)

更改您的WHERE条件以过滤结果。

假设“wi.blnDefaultFinish = 1”表示默认值,其中“0”表示非默认值。

因此,您的查询应该说:

SELECT DISTINCT
    wi.intFinishID,
    wi.blnDefaultFinish
FROM tbl_wheelimage wi
WHERE (wi.intwheelID = 4950 AND wi.blnDefaultFinish = 1) OR (wi.intFinishID = 1658 AND wi.blnDefaultFinish = 0)             
ORDER BY wi.blnDefaultFinish DESC