我想知道如何在案例中使用多个订单列。例如 case 1,order by FirstName, GivenName case 2 order by GivenName, FirstName。
我试过这个,但看起来冒号引入了一个错误
按大小写排序,当 1 然后 FirstName, GivenName else GivenName, FirstName end
在 PostgreSQL 中,我试图在一个函数中构建一个 where 子句,该函数使用入站参数来确定 IN 的内容
例如:
select fld1, count(fld1)
from xyz
where fld1 in (
case $1
when 1 then 'Value1'
when 2 then 'Value2'
when 3 then '''Value1'',''Value2'''
when 4 then '''Value4'',''Value5'',''Value6'''
else NULL
)
group by fld1
Run Code Online (Sandbox Code Playgroud)
值 1 和值 2 一样正常工作,值 3 和 4 在语法上没有失败,但没有返回任何行。
我有以下查询,从星期一开始,按周返回一组计数,一行是汇总总数。
select distinct
DATEPART(ISO_WEEK, ig.IN_EVT_DT_TM) as B2B_Week,
count (distinct bm.MISSION_ID) as B2B_Mission,
count (distinct dl.DRIVER) as Distinct_B2B_Drivers
from
DD.B2B_MISSIONS bm
inner join dd.IN_GATE ig on bm.MISSION_ID = ig.IN_MISSION_ID
inner join dd.XNS_DRIVER_LOGIN dl on ig.IN_DRIVER_ID = dl.driver
group by
DATEPART(ISO_WEEK, ig.IN_EVT_DT_TM)
with rollup
order by
DATEPART(ISO_WEEK, ig.IN_EVT_DT_TM)
;
Run Code Online (Sandbox Code Playgroud)
我的结果表如下所示:
B2B_Week B2B_Mission Distinct_B2B_Drivers
1647 357
44 717 264
45 930 301
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
B2B_Week B2B_Mission Distinct_B2B_Drivers
44 717 264
45 930 301
TOTAL 1647 357
Run Code Online (Sandbox Code Playgroud)
问题
总计行出现在顶部而不是底部。这很可能与第二个问题有关。
我一直无法使用 CASE 语句返回日期列为 NULL 的“TOTAL”。主要问题是 DATE …
我有一个查询,我通过重写工作-它有一个巨大的一堆case文中陈述select列表中的所有基本是这样的:
select
Column1 =
case when (Something = 2) and (SomethingElse is null) and (AnotherThing in (1, 2))
then 1
else 0
end,
Column2 =
case when (Something = 3) and (SomethingElse is not null) and (AnotherThing in (2, 3))
then 1
else 0
end,
...
Run Code Online (Sandbox Code Playgroud)
特别注意when <expressions> then 1 else 0所有这些通用的“ ”逻辑。
它看起来真的很臃肿和冗长,是对case语句的粗暴使用- 我的编程大脑告诉我这可以通过一些基本的二进制&逻辑更简洁地实现,case完全删除:
select
Column1 = (Something = 2) & (SomethingElse is null) & …Run Code Online (Sandbox Code Playgroud) 我有一个包含一些项目代码的表格。这些代码是
e.g.: B001, B002, Z15001, Z14001, P003,...
Run Code Online (Sandbox Code Playgroud)
我需要这个结果表:
Z15001
Z15002
...
B001
B002
...
C001
C002
...
Z14099
Z14098
Z14097
...
Z13099
Z13098
...
Z13001
Run Code Online (Sandbox Code Playgroud)
我试过了,但顺序不对。
select *
from table
order by
case
when Kod like 'Z15%' then 1
when Kod like 'B%' then 2
when Kod like 'C%' then 3
when Kod like 'D%' then 4
when Kod like 'E%' then 5 else 6 end asc, Kod asc
, case when Kod NOT LIKE 'B%'
AND Kod NOT LIKE …Run Code Online (Sandbox Code Playgroud) 这可能不是检索列中包含指定值的行的理想查询,但下面的解决方案有效地返回新列别名中指定的值,但包含 NULL 值。如何构建以下查询来排除列别名中包含 NULL 值的行?
SELECT student_id,
salutation,
CASE
WHEN salutation IN('Dr.') THEN 'Doctor'
END AS "NewSalutation"
FROM student.student
Run Code Online (Sandbox Code Playgroud)
我欢迎其他方法 - 谢谢!
我很确定这是一个隐式转换,但我无法找到有关它的信息。
假设我有这个 SQL:
SELECT
CASE WHEN (SELECT 1 WHERE (1=1)) = 1 THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
我的子查询返回一行,因此与 1 进行比较。这导致我的 CASE WHEN 产生 1 输出。
即使我将子查询设置为不返回如下示例所示的行,CASE 语句也会返回 0 结果:
SELECT
CASE WHEN (SELECT 1 WHERE (1=0)) = 1 THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
使用这种类型的比较让我感到不舒服。以我的拙见,最好像这样使用 EXISTS:
SELECT
CASE WHEN EXISTS(SELECT 1 WHERE (1=1)) THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)如果我不使用 EXISTS 有什么优点或缺点吗?
我的 select case when 语句有问题,我想在 select case when 语句中添加一个新列,我得到了结果,但是?????因为我已将该列设置为阿拉伯语单词,所以我试图转换新列nvarchar(55)不幸的是,我得到了相同的结果。
我怎样才能得到正确的结果?
SELECT case when ( CAST(o.startTime as time(7)) > cast(Start as time(7)))
then cast('????' as nvarchar(55))
else cast('????' as nvarchar(55)) end as stat,
userId, FirstName
from Users, TimeTable
Run Code Online (Sandbox Code Playgroud) 我有一张像休闲的桌子
work_id group effort
----------- ----- --------
1 A 10
1 B 5
2 A 7
2 C 20
2 B 3
Run Code Online (Sandbox Code Playgroud)
我需要一个查询返回像休耕的情况
work_id 1.group effort1 2.Group effort2 3.group effort3
----------- ----- -------- ------- ------ ------- ------
1 A 10 B 5
2 A 7 C 20 B 3
Run Code Online (Sandbox Code Playgroud)
组根据另一个表中的另一个参数进行分组。但是当我写我的查询时
case when <condition1> then group end as 1.group
case when <condition2> then group end as 2.group
case when <condition4> then group end as 3.group
Run Code Online (Sandbox Code Playgroud)
...(努力也是一样)
它返回
work_id 1.group effort 2.Group …Run Code Online (Sandbox Code Playgroud) SELECT x, y, z,
CASE
WHEN COUNT (PH.header_id) OVER (PARTITION BY PL.header_id)
NOT IN (null,0) THEN L_Count
ELSE COUNT (PH.header_id) OVER (PARTITION BY PL.header_id)
END as quantity
Run Code Online (Sandbox Code Playgroud)
有没有更有效的写法?
我非常清楚它在一张大桌子上执行了两次计数。
不幸的是,我无法发布查询计划,因为我正在使用的用户帐户正在等待 SHOWPLAN 权限。
NOT IN 子句是一个附带问题。感谢您提供有关改进方法的评论反馈,但问题的焦点是重复计数。