本文将带您了解关于sql–选择子查询里面的case语句何时?的新内容,同时我们还将为您解释select子句中的子查询的相关知识,另外,我们还将为您提供关于CASE语句在SQLite查询中、CASE语句
本文将带您了解关于sql – 选择子查询里面的case语句何时?的新内容,同时我们还将为您解释select子句中的子查询的相关知识,另外,我们还将为您提供关于CASE语句在SQLite查询中、CASE语句子查询的行数用作结果、HQL或条件中的CASE语句、mysql – 在Sequel中编写一个复杂的case语句?的实用信息。
本文目录一览:- sql – 选择子查询里面的case语句何时?(select子句中的子查询)
- CASE语句在SQLite查询中
- CASE语句子查询的行数用作结果
- HQL或条件中的CASE语句
- mysql – 在Sequel中编写一个复杂的case语句?
sql – 选择子查询里面的case语句何时?(select子句中的子查询)
select case @Group when 6500 then (select top 10 * from Table1) when 5450 then (select top 5 * from Table1) when 2010 then (select top 3 * from Table1) when 2000 then (select top 1 * from Table1) else 0 end as 'Report'
解决方法
declare @Numrows int; select @Numrows = (case @Group when 6500 then 10 when 5450 then 5 when 2010 then 3 when 2000 then 1 else 0 end); select top(@NumRows) * from Table1;
你也可以这样做:
with const as ( select (case @Group when 6500 then 10 when 5450 then 5 when 2010 then 3 when 2000 then 1 else 0 end) as Numrows ) select t.* from (select t.*,ROW_NUMBER() over () as seqnum from table1 t ) t cross join const where seqnum <= NumRows;
在这种情况下,您需要列出列以避免在列表中获取seqnum.
顺便说一下,通常在使用top时你也应该有订单.否则,结果是不确定的.
CASE语句在SQLite查询中
UPDATE pages SET lkey = CASE lkey WHEN lkey >= 11 THEN lkey - 5 ELSE CASE lkey WHEN lkey > 5 THEN lkey + 2 ELSE lkey END END,rkey = CASE lkey WHEN lkey >= 11 THEN rkey - 5 ELSE CASE rkey WHEN rkey < 11 THEN rkey + 2 ELSE rkey END END WHERE rkey > 5 AND lkey < 12;
CASE lkey WHEN lkey > 5 THEN lkey + 2 ELSE lkey END
这是
CASE WHEN [condition] THEN [expression] ELSE [expression] END
要么
CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
所以在你的情况下它会读:
CASE WHEN lkey > 5 THEN lkey + 2 ELSE lkey END
查看文档(CASE表达式):
http://www.sqlite.org/lang_expr.html
CASE语句子查询的行数用作结果
您可以使用子查询:
select result_column1,result_column2,result_column1 + result_column2 sum_of_results
from (
select
(select count(*) from subtable where subtable.column1value = 100) as result_column1,(select count(*) from subtable2 where subtable2.column2value = 100) as result_column2
) x
请注意,我删除了where
子句中文字值周围的单引号;如果这些列是数字列,则应这样比较它们。
如果您希望将其放在一列中,请执行以下操作:
COALESCE(
nullif((SELECT COUNT(*) FROM subtable WHERE subtable.column1value = '100'),0),(SELECT COUNT(*) FROM subtable WHERE subtable.column1value = '100')
)
如果第一个计数为零(coalesce将继续第二个查询),则第一个为null,然后对第二个表进行计数-如果没有记录,则末尾为0。
,由于使用的是案例,因此我假设仅当没有子表时才需要第二列值。column1value='100'记录
select
(CASE WHEN (SELECT true FROM subtable WHERE subtable.column1value = '100' limit 1) THEN (SELECT COUNT(*) FROM subtable WHERE subtable.column1value = '100')
WHEN (SELECT true FROM subtable2 WHERE subtable2.column2value = '100' limit 1) THEN (SELECT COUNT(*) FROM subtable2 WHERE subtable2.column2value = '100')
ELSE 0 END) as column_name
HQL或条件中的CASE语句
从这个问题派生出来的,是否可以对以下SQL语句使用HQL或Criteria:
SELECT e.type, count(e), count(d), count (case when gender = ''male'' then 1 else NULL end) AS NumberOfMaleEmployeesfrom Department d JOIN d.employees eWHERE e.dead = ''maybe'' GROUP BY e.type
尽管Google提出了一些命中意见,指出HQL支持CASE语句,但是Hibernate 3.6.6失败并显示
QuerySyntaxException:意外令牌:CASE
当我在EntityManager实例上创建上述查询时。
为每个e.type创建另一个查询来手动确定男性人数(例如针对每个e.type)有多少个坏主意?
SELECT count(e), from Department d JOIN d.employees eWHERE e.dead = ''maybe'', e.type = ugly
由于可能有很多类型,因此这可能很慢。我希望数据库为我完成工作。
答案1
小编典典好吧,似乎支持case语句:
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html
它们似乎在count()中不起作用。另一种方法是使用sum(case when … then 1 else 0end)代替
mysql – 在Sequel中编写一个复杂的case语句?
我有一个相当复杂的case语句在MySQL中有效:
SELECT # rest of code omitted
CASE WHEN code = 'a' THEN 'x'
WHEN code IN ('m','n') THEN 'y'
WHEN class IN ('p','q') AND amount < 0 THEN 'z'
ELSE NULL END AS status
FROM # rest of code omitted
然而,所有在续集中写这篇文章的尝试都失败了.我使用它作为模板:
Sequel.case([[:c,1],[:d,2]],0) # (CASE WHEN "c" THEN 1 WHEN "d" THEN 2 ELSE 0 END)
(自Jeremy Evans’ Github起)
我最好的猜测是:
dataset.select( # rest of code omitted...
[[(:code => 'a'),'x'],[(:code => 'b'),'y'],[(:class => ['p','q'],:amount < 0),'z']].case(nil).as(:status))
有任何想法吗?
这是我对您的查询的最佳尝试:
DB[:testtable].select(
Sequel.case([
[{code: 'a'},[{code: ['m','n']},[{class: ['p',(Sequel.expr(:amount) > 0) => true},'z']],nil).
as(:status)
)
这会产生以下(几乎正确的)sql:
SELECT (
CASE WHEN (`code` = 'a') THEN 'x'
WHEN (`code` IN ('m','n')) THEN 'y'
WHEN ((`class` IN ('p','q')) AND ((`amount` > 0) IS TRUE)) THEN 'z'
ELSE NULL END) AS `status` FROM `testtable`
我无法弄清楚如何在case语句中使用不等式运算符.也许你会有更多的运气.
我的建议是,您只需在sql中编写查询,它将更容易阅读,并且更易于维护.
关于sql – 选择子查询里面的case语句何时?和select子句中的子查询的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于CASE语句在SQLite查询中、CASE语句子查询的行数用作结果、HQL或条件中的CASE语句、mysql – 在Sequel中编写一个复杂的case语句?的相关信息,请在本站寻找。
本文标签: