sql server 按值得优先级做帅选数据的条件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 按值得优先级做帅选数据的条件?相关的知识,希望对你有一定的参考价值。
例如有两个字段,需要更具type的优先级来定where语句。
ID TYPE
1 A
1 B
1 C
-----
2 B
2 C
----
3 B
3 C
要求:有A的先选A的那条,否则B的那条,否则C的那条。
结果就应该是
ID TYPE
1 A
-----
2 B
----
3 B
在IBM netezza里可以写作
where
case
when type='A' then type='A'
when type='B' then type='B'
when type='C' then type='C'
else ''
end
但是在sql server 2008里好像不可以这么写,那有什么较好的方法来实现这个功能,要兼顾效率。此表数据为千万级别。
Thanks
放在查询字段里面就可以了
select *,case
when type='A' then type='A'
when type='B' then type='B'
when type='C' then type='C'
else ''
end from 表名
如果你只想看abc返回的 结果就再嵌套一个查询即可
select * from (
select *,case
when type='A' then type='A'
when type='B' then type='B'
when type='C' then type='C'
else ''
end typen from 表名) a
where a. typen in(a,b,c) 参考技术A
你的意思就是用type里的值按优先级排列好后,在where里当条件用吗?
select * from 表名 where 列名 = (select type from 表名 order by type asc)用order by 先把type按升序排列好后,再取type值作where的筛选条件。然后再显示目标表的数据。不知道这样可不可以满足到你的要求?
追问其实我的type字段有两个值DIRECT , GEO。对于同一个ID,如果有DRIECT的就选出DIRECT的记录,没有的话就选出GEO。我直接选出DIRECT的记录union all 上所有GEO的记录并且ID不在刚刚选出来的DIRECT里的也能实现了。谢谢。
参考技术B SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。
另外:一个查询语句各个部分的执行顺序:
--8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
--(1) FROM <left_table>
--(3) <join_type> JOIN <right_table>
--(2) ON <join_condition>
--(4) WHERE <where_condition>
--(5) GROUP BY <group_by_list>
--(6) WITH CUBE | ROLLUP
--(7) HAVING <having_condition>
--(10) ORDER BY <order_by_list>
sql server 按时间段查询
百度的资料,保存下来:
在写按时间段查询的sql语句的时候 一般我们会这么写查询条件:
where date>=‘2010-01-01‘ and date<=‘2010-10-1‘。
但是在实执行Sql时些语句会转换成这样:
where date>=‘2010-01-01 0:00:00‘ and date<=‘2010-10-1:0:00:00‘,再看这个条件的话,也许就会有些明白,
那就是‘2010-10-1 0:00:00‘ 之后的数据例如(‘2010-10-1:08:25:00‘)查不到,也就是说2010-10-1的数据查不到。
知道原因了可以修改查询条件为:
where date>=‘2010-01-01‘ and date<=‘2010-10-1 23:59:59‘ 或 where date>=‘2010-01-01‘ and date<=‘2010-10-2‘。
某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放
(1)、例如数据
2009-01-22 21:22:22
2009-01-22 19:21:11
2009-01-22 23:10:22
(2)、用 select * from TABLE where date between ‘2009-1-22‘ And ‘2009-1-22‘ ,想查日期为2009-1-22的记录,结果查不到
(3)、问题原因
短日期类型默认Time为00:00:00,所以当使用between作限制条件时,就相当于between ‘2009-1-22 00:00:00‘ and ‘2009-1-22 00:00:00‘,因此就查不出数据。
(4)、解决方法
--方案一:对数据库里面的字段进行日期格式转换
select * from tb where convert(varchar(10),riqi,120) = ‘2009-01-22‘
--方案二:给日期补全时分秒
select * from tb where riqi between ‘2009-01-22 00:00:00‘ and ‘2009-01-22 23:59:59‘
--结果
/**//*
id riqi
---- ------------------------------------------------------
A 2009-01-22 21:22:22.000
B 2009-01-22 19:21:11.000
C 2009-01-22 23:10:22.000
(所影响的行数为 3 行)
*/
以上是关于sql server 按值得优先级做帅选数据的条件?的主要内容,如果未能解决你的问题,请参考以下文章