GVKun编程网logo

sql – 选择子查询里面的case语句何时?(select子句中的子查询)

2

本文将带您了解关于sql–选择子查询里面的case语句何时?的新内容,同时我们还将为您解释select子句中的子查询的相关知识,另外,我们还将为您提供关于CASE语句在SQLite查询中、CASE语句

本文将带您了解关于sql – 选择子查询里面的case语句何时?的新内容,同时我们还将为您解释select子句中的子查询的相关知识,另外,我们还将为您提供关于CASE语句在SQLite查询中、CASE语句子查询的行数用作结果、HQL或条件中的CASE语句、mysql – 在Sequel中编写一个复杂的case语句?的实用信息。

本文目录一览:

sql – 选择子查询里面的case语句何时?(select子句中的子查询)

sql – 选择子查询里面的case语句何时?(select子句中的子查询)

有没有办法在sql server case / when语句中从“then”运行select语句? (我需要从then语句运行子查询.)我不能在where语句中使用它.
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查询中

CASE语句在SQLite查询中

为什么此查询不起作用? (我试图替换嵌套的IF语句“… SET lkey = IF(lkey> = 11,lkey-5,IF(lkey> 5,lkey 2,lkey)
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语句子查询的行数用作结果

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语句

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语句?

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语句?的相关信息,请在本站寻找。

本文标签: