Name varchar, Value int, Active bit
-----------------------------------
'Name1',1,1
'Name2',2,1
'Name1',3,0
'Name2',4,0
'Name3',1,1
'Name4',1,1
我想返回Active
是什么,但在0
时优先考虑,所以我想返回这个:
'Name1',3
'Name2',4
'Name3',1
'Name4',1
我试过这个,但是在我的返回语句
中包含Active
会出错
Select Distinct Name, Value From Table Order by Active
所以我尝试了这个:
Select Distinct Name, Value, Active From Table Order by Active
但现在它返回所有行。我想在不同的结果中优先考虑where Active = 0
,但由于它要求我在return语句中放置Active
会使这变得复杂。
有人可以帮忙吗?
答案 0 :(得分:1)
您的问题有点令人困惑,但如果我理解正确,您需要使用group by
声明:
select name,
max(case when active = 0 then value end) value
from yourtable
group by name
通过编辑,您可以使用coalesce
并仍然可以使用它:
select name, coalesce(max(case when active = 0 then value end), max(value)) value
from yourtable
group by name
答案 1 :(得分:0)
您可以按照select子句中未包含的字段进行排序
Select Name, Value
From Table
ORDER BY Active, Name, Value
但你不能同时使用SELECT DISTINCT
。
如果你使用"选择不同的"有些行可能会被丢弃,当发生这种情况时,[Active]和" distinct"之间不再存在任何可行的关系。行。因此,如果使用select distinct,并且需要按[Active]排序,那么[Active]必须在select子句中。
答案 2 :(得分:0)
也许这就是:
create table #t(
Active int not null,
Name varchar(10) not null,
Value int not null,
primary key clustered (Active desc,Name,Value)
);
insert #t(Active,Name,Value)
select Active,Name,Value from [Table];
select Name, Value
from #t;
go
根据需要产生:
Name Value
---------- -----------
Name1 1
Name2 2
Name3 1
Name4 1
Name1 3
Name2 4
答案 3 :(得分:0)
我无法删除其他答案的帖子b / c,但这里是我正在寻找的答案,以防其他人想知道。
SELECT Distinct Name,Value FROM Table WHERE Active = 0
UNION ALL
SELECT Distinct Name,Value FROM Table a WHERE Active = 1 AND NOT EXISTS(
SELECT TOP 1 1 FROM表a2 WHERE a2.Active = 0 AND a2.Name = a.Name
)
感谢大家的帮助。