我对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
答案 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