欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

这样的查询怎么写

更新时间: 2014-01-05 02:17:12 责任编辑: Author_N1

 

这样的查询如何写
------------------------------
品名  单价  地域别
a     10    1
a     11    2
b     5     1
b     4     2
c     3     1
d     6     2

想要的结果:
如果给条件是True则显示:
------------------------------
品名  单价  地域别
a     10    1
b     5     1
c     3     1
d     6     2
如果给条件是False则显示:
------------------------------
品名  单价  地域别
a     11    2
b     4     2
c     3     1
d     6     2

就是说:①如果条件为真,同一种品名有两种单价就显示地域别为1的单价,
          一种品名只有一种单价就不考虑地域别
        ②如果条件为假,同一种品名有两种单价就显示地域别为2的单价,
          一种品名只有一种单价就不考虑地域别
--参考方法--

--true
;with a1 (品名,单价,地域别) as
(
select 'a',10,1 union all 
select 'a',11,2 union all 
select 'b',5,1 union all 
select 'b',4,2 union all 
select 'c',3,1 union all 
select 'd',6,2
)
,a2 as
(
select *,row_number() over(partition by 品名 order by 地域别) re from a1
)
select 品名,单价,地域别
from a2 
where re=1

--False
;with a1 (品名,单价,地域别) as
(
select 'a',10,1 union all 
select 'a',11,2 union all 
select 'b',5,1 union all 
select 'b',4,2 union all 
select 'c',3,1 union all 
select 'd',6,2
)
,a2 as
(
select *,row_number() over(partition by 品名 order by 地域别 desc) re from a1
)
select 品名,单价,地域别
from a2 
where re=1

--参考方法--

create table kc
(品名 varchar(5),单价 int,地域别 int)

insert into kc
 select 'a',10,1 union all
 select 'a',11,2 union all
 select 'b',5,1 union all
 select 'b',4,2 union all
 select 'c',3,1 union all
 select 'd',6,2


-- 如果给条件是True
declare @x varchar(10)
select @x='True'

select a.* 
 from kc a
 where a.地域别=case @x when 'True' then 1
                       when 'False' then 2 end
 or not exists
 (select 1 from kc b where b.品名=a.品名 and b.地域别!=a.地域别)

/*
品名    单价         地域别
----- ----------- -----------
 a     10          1
 b     5           1
 c     3           1
 d     6           2

(4 row(s) affected)
*/


-- 如果给条件是False
declare @x varchar(10)
select @x='False'

select a.* 
 from kc a
 where a.地域别=case @x when 'True' then 1
                       when 'False' then 2 end
 or not exists
 (select 1 from kc b where b.品名=a.品名 and b.地域别!=a.地域别)

/*
品名    单价         地域别
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:12
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7982/
本文WWW.DOC100.NET DOC100.NET版权所有。