我想使用request_time参数自动设置session_id,所以我选择了一个包含case语句的mysql存储过程.继续.
create procedure upd_userinput(in request_time timestamp, out user_session_id int)
begin
update user_input;
case request_time
when time(request_time) < '9:15:00' && time(request_time) > '8:15:00'
then set user_session_id = 1;
when time(request_time)< '10:15:00' && time(request_time) > '11:15:00'
then set user_session_id =2;
end case;
end
//
Run Code Online (Sandbox Code Playgroud)
但是在//之后输入时出现1064错误.我已经检查了mysql文档,我认为案例语法是正确的.
请帮忙.
我的情况很复杂.我想在"where子句"上写一个包含"case when"条件的sql查询.
就像那样:
SELECT *
FROM <table>
WHERE
<Column1> in
CASE <Column2>
WHEN 1 THEN ('OP', 'CL')
WHEN 0 THEN ('RE', 'ST')
END
Run Code Online (Sandbox Code Playgroud)
Column1必须为"in",而不是"=".因为Column1的条件有多个值.该查询返回"',''附近的语法不正确." 错误.
你能给我任何建议吗?(对不起,我的英语不好.)
编辑:我想我误解了.如果Column2为1,则条件必须类似于"IN('OP','CL')"否则Column1为2,条件必须类似"IN('RE','ST')".
我有这样的示例查询:
select t1.name,t1.bday,t2.address,t2.contactnum
from table1 as t1
left join table2 as t2 on t1.p_id = t2.p_id
where (case when @qualified = '2' then t2.role is null
case when @qualified = '3' then t2.role is not null` end)
Run Code Online (Sandbox Code Playgroud)
当我执行查询时,会弹出一个错误,指示:
关键字'is'附近的语法不正确.
有没有想过为这些人解决问题?
谢谢!
此查询的目的是获取表中的空行和非空行,具体取决于参数@qualified上传递的值.
有没有办法将 OR 与 CASE WHEN 一起使用,就像这样?
SELECT
case 'brasil'
when 'chile' OR 'brasil' THEN
'ok'
when 'argentina' then
'ok2'
when 'venezuela' THEN
'ok3'
ELSE
'chaves'
end;
Run Code Online (Sandbox Code Playgroud) 我已经开始学习Ruby了.我有一个小项目来构建游戏并尝试创建一个接收用户输入并相应处理的函数.
def Game.listener
print "> "
while listen = $stdin.gets.chomp.downcase
case listen
when (listen.include?("navigate"))
puts "Navigate to #{listen}"
break
when ($player_items.include?(listen))
Items.use(listen)
break
end
puts "Not a option"
print "> "
end
end
Run Code Online (Sandbox Code Playgroud)
但是,case语句无法检测到我已键入导航.有没有办法解决这个问题,或者如果我完全关闭,有人能指出我正确的方向吗?
我找到了解决问题的方法,这是一种安全可靠的方法吗?
while listen = $stdin.gets.chomp
case listen.include?(listen)
when listen.include?("navigate")
puts "Navigate to #{listen}"
when listen.include?("test")
puts "test"
when $player_items.include?(listen)
puts "Using the #{$player_items[listen]}"
break
else
puts "Not a option"
end
print "> "
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试将列数据转置为单独的列。(请注意,我不能使用 Pivot 函数或动态 SQL)。
源表具有三列(年份、城市、数据1)。
我正在尝试将“城市”列转置为单独的列,以便比较所选城市的数据。
这是我的代码:
SELECT t.year,
CASE WHEN city = 'San Francisco' THEN t.data1 END) SF,
CASE WHEN city = 'Paris' THEN t.data1 END) PAR,
CASE WHEN city = 'New York' THEN t.data1 END) NYC
FROM t
WHERE city IN ('San Francisco', 'Paris', 'New York')
GROUP BY t.year, t.data1
ORDER BY t.year
Run Code Online (Sandbox Code Playgroud)
结果如下表。
问题是“年”行重复了几次,而我希望将所有选定城市的数据显示在一个“年”行上。否则我无法绘制任何折线图。
任何帮助表示赞赏。
表输入示例:
+------+---------------+-------+
| year | city | data1 |
+------+---------------+-------+
| 2001 | San Francisco | 15.25 |
| 2001 | …Run Code Online (Sandbox Code Playgroud) 我已经编写了以下查询,以帮助我将数据细分为不同的单元格。这有200多个条件,所以我只提供了一个小样本。对于我来说,有没有一种更好的方法可以编写此语句,因为从研究进展来看,我最多只能编写50条CASE WHEN....THEN语句。
SELECT
Company_0.CompanyID
,Company_0.CoaCompanyName
,(CASE
WHEN Company_0.CompanyID = 7942127 THEN 'BLUE'
WHEN Company_0.CompanyID = 7950986 THEN 'BLUE'
WHEN Company_0.CompanyID = 7955733 THEN 'BLUE'
WHEN Company_0.CompanyID = 7955922 THEN 'BLUE'
WHEN Company_0.CompanyID = 7956194 THEN 'RED'
WHEN Company_0.CompanyID = 9166261 THEN 'RED'
WHEN Company_0.CompanyID = 9167003 THEN 'YELLOW'
WHEN Company_0.CompanyID = 9167015 THEN 'YELLOW
ELSE NULL
END' AS 'CELL'
Run Code Online (Sandbox Code Playgroud)
返回结果后,它应如下所示:
ID COMPANY NAME CELL
-------------------------------------------------------
7942127 A BLUE
7950986 B BLUE
7955733 C BLUE
7955922 D BLUE
7956194 …Run Code Online (Sandbox Code Playgroud) 我正在 Postgres 中执行 SQL 查询,该查询选择一个数字字段。我需要显示一个字符串值作为此 SELECT 的结果,因此我使用CASE如下语句:
Select
case numeric_field
when 100 then 'some string'
when 200 then 'some other string'
Run Code Online (Sandbox Code Playgroud)
问题是,如果数字字段有任何其他值(例如300),我需要显示该值(当然作为字符串)。CONVERT我尝试像这样在其他上放一个
...
else CONVERT(varchar(10),numeric_field)
Run Code Online (Sandbox Code Playgroud)
但这没有用。我该怎么做呢?
我有一个数据框(fbwb),在一组参与者中使用多个度量(1-3)对欺凌(1-6)进行多次评估.df看起来像这样:
fbwb <- read.table(text="id year bully1 bully2 bully3 cbully bully_ever
100 1 NA 1 NA 1 1
100 2 1 1 NA 1 1
100 3 NA 0 NA 0 1
101 1 NA NA 1 1 1
102 1 NA 1 NA 1 1
102 2 NA NA NA NA 1
102 3 NA 1 1 1 1
102 4 0 0 0 0 1
103 1 NA 1 NA 1 1
103 2 NA 0 0 0 1", …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 str_detect 和 case_when 根据多个模式重新编码字符串,并将重新编码的值的每次出现粘贴到新列中。正确列是我试图实现的输出。
这类似于this question和this question If it can't be done with case_when (仅限于我认为的一种模式)有没有更好的方法可以仍然使用tidyverse来实现?
Fruit=c("Apples","apples, maybe bananas","Oranges","grapes w apples","pears")
Num=c(1,2,3,4,5)
data=data.frame(Num,Fruit)
df= data %>% mutate(Incorrect=
paste(case_when(
str_detect(Fruit, regex("apples", ignore_case=TRUE)) ~ "good",
str_detect(Fruit, regex("bananas", ignore_case=TRUE)) ~ "gross",
str_detect(Fruit, regex("grapes | oranges", ignore_case=TRUE)) ~ "ok",
str_detect(Fruit, regex("lemon", ignore_case=TRUE)) ~ "sour",
TRUE ~ "other"
),sep=","))
Num Fruit Incorrect
1 Apples good
2 apples, maybe bananas good
3 Oranges other
4 grapes w apples good
5 pears other
Run Code Online (Sandbox Code Playgroud)
Num …Run Code Online (Sandbox Code Playgroud) case-when ×10
sql ×6
case ×2
postgresql ×2
r ×2
dplyr ×1
excel ×1
include ×1
mutate ×1
mysql ×1
openedge ×1
procedures ×1
progress-db ×1
ruby ×1
sql-convert ×1
sql-server ×1
stata ×1
t-sql ×1
tidyverse ×1
timestamp ×1
transpose ×1
where-clause ×1