本OR该在WHEN一个子句CASE语句不支持.我怎样才能做到这一点?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Run Code Online (Sandbox Code Playgroud) 当突变是有条件的(取决于某些列值的值)时,是否可以使用mutate?
这个例子有助于显示我的意思.
structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4,
2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4,
5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4,
2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA,
8L), class = "data.frame")
a b c …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的查询,经常使用case /.现在我在这里有这个SQL,它不起作用.
(select case when xyz.something = 1
then
'SOMETEXT'
else
(select case when xyz.somethingelse = 1)
then
'SOMEOTHERTEXT'
end)
(select case when xyz.somethingelseagain = 2)
then
'SOMEOTHERTEXTGOESHERE'
end)
end) [ColumnName],
Run Code Online (Sandbox Code Playgroud)
造成麻烦的是xyz.somethingelseagain = 2,它说无法绑定那个表达.xyz是表的一些别名,它在查询中进一步连接.这里有什么不对?删除2个案例/小时中的一个纠正了这个,但我需要它们两个,可能更多的情况.
在SQL Server 2005上,我试图查询此select语句
SELECT AlarmEventTransactionTableTable.TxnID,
CASE AlarmEventTransactions.DeviceID
WHEN DeviceID IN( '7', '10', '62', '58',
'60', '46', '48', '50',
'137', '139', '142', '143', '164' )
THEN '01'
WHEN DeviceID IN( '8', '9', '63', '59',
'61', '47', '49', '51',
'138', '140', '141', '144', '165' )
THEN '02'
ELSE 'NA'
END AS clocking,
AlarmEventTransactionTable.DateTimeOfTxn
FROM multiMAXTxn.dbo.AlarmEventTransactionTable
Run Code Online (Sandbox Code Playgroud)
它返回以下错误
消息156,级别15,状态1,行4关键字"IN"附近的语法不正确.
请给我一些关于我的代码可能出错的建议.
我已广泛搜索此网站但无法找到解决方案.
以下是我的查询示例:
SELECT
ActivityID,
Hours = (CASE
WHEN ActivityTypeID <> 2 THEN
FieldName = (Some Aggregate Sub Query),
FieldName2 = (Some other aggregate sub query)
WHEN ActivityTypeID = 2 THEN
FieldName = (Some Aggregate Sub Query with diff result),
FieldName2 = (Some Other Aggregate Sub Query with diff result)
END)
Run Code Online (Sandbox Code Playgroud)
显然我遗漏了很多查询,我只想看看是否可能.
我知道我可能只做两次"CASE",但我想我会问......
我想在Symfony 2.3中使用Doctrine来运行此查询.但似乎Doctrine不理解CASE声明.有人可以帮忙吗?先感谢您!
SELECT max(id) id, name
FROM cards
WHERE name like '%John%'
GROUP BY name
ORDER BY CASE WHEN name like 'John %' THEN 0
WHEN name like 'John%' THEN 1
WHEN name like '% John%' THEN 2
ELSE 3
END, name
Run Code Online (Sandbox Code Playgroud) 给出以下案例陈述:
1 WHEN r.code= '00' then 'A1'
2 WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2' <
3 WHEN r.code ='0120' then 'A3'
4 WHEN r.code ='01' then 'A4' <
5 WHEN r.code ='1560' then 'A5'
6 WHEN r.code ='1530' then 'A6'
7 WHEN r.code ='1550' then 'A7'
Run Code Online (Sandbox Code Playgroud)
我假设第2行总是在第4行之前执行?然后我读了一些语句,比如' SQL是一种声明性语言,这意味着它告诉SQL引擎要做什么,而不是如何进行
并想知道这是否也与CASE声明中的执行顺序有关.基本上,我可以保留上面的代码,而不必将第4行更改为
4 WHEN r.code ='01' AND r.source != 'PXWeb' then 'A4'
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含多行的数据框,如下所示:
df <- data.frame(a = c(NA,20,NA),
date1 = c("2016-03-01", "2016-02-01", "2016-02-01"),
b = c(50,NA, NA),
date2 = c("2016-02-01", "2016-03-01", "2016-03-01"),
c = c(10,10, 10),
date3 = c("2016-01-01","2016-01-01", "2016-01-01"))
Run Code Online (Sandbox Code Playgroud)
对于每一行,我想这不是一个最新的值NA之间a,b以及c根据dates(所以我分别来看看date1,date2或者date3和挑最近的一个).
基本上,date1给出对应于该值的日期a,
date2给出对应于该值的日期b,
date3给出对应于该值的日期c.
如果date1 > date2&date1 > date3,我将要取值a
但是,如果值a是NA(在我的例子中是这种情况),我将比较date2和date3.在我的例子中,date2 > date3 …
我的要求是从复杂查询中获取一个数字并检查num = desiredNum.
如果它等于desiredNum,那么我必须执行另一组select语句,
有什么方法可以在查询中实现这一点而不是编写函数吗?
例如:
select case when val =2
then select val1 from table1
else 'false'
from (select val from table)
Run Code Online (Sandbox Code Playgroud)
这可能吗 ??
我想在查询条件时写入嵌套大小写,以便存储将来自一个案例的条件和条件变为同一个新列时的另一个案例.为了得到这种结果,我将查询编写为:
(case when sq_name_new1 like format('%%%s%%',demo.name) THEN count(sq_name_new1) else (when demo.empcode is not null then count(demo.id) End) END) AS indivisual from res_scheduledjobs
Run Code Online (Sandbox Code Playgroud)
在上面的查询demo.name列来自CTE.so我的整个查询看起来像:
with demo(empcode,id,name) as
(select hr_employee.emp_code,hr_employee.id,concat(resource_resource.name,' ',hr_employee.middle_name,' ',hr_employee.last_name) as name from hr_employee inner join resource_resource on resource_resource.id=hr_employee.resource_id)
select demo.empcode,demo.name,sq_name_new1,(case when sq_name_new1 like format('%%%s%%',demo.name) THEN count(sq_name_new1) else (when demo.empcode is not null then count(demo.id) End) END) AS indivisual from res_scheduledjobs LEFT JOIN demo on demo.id=res_scheduledjobs.assigned_technician group by res_scheduledjobs.assigned_technician,sq_name_new1,demo.empcode,demo.name ;
Run Code Online (Sandbox Code Playgroud)
我只想将(sq_name_new1)列的计数存储到INDIVISUAL列中,将(demo.id)列的计数存储到同一列中,即如果第一种情况不匹配,则在INDIVISUAL中.但是,当我执行我的查询时,它会抛出一个错误.也就是说,条件语法时出现错误.
请帮我写出正确的嵌套case-when条件.
case-when ×10
sql ×4
sql-server ×3
case ×2
dplyr ×2
if-statement ×2
r ×2
t-sql ×2
doctrine-orm ×1
mutate ×1
mysql ×1
nested ×1
php ×1
plsql ×1
postgresql ×1
rank ×1
select ×1
sybase ×1
symfony ×1