我正在使用这个特定的例子
https://www.w3schools.com/sql/sql_orderby.asp
我想获取按国家/地区模式排序的客户列表。
例如,Country
以 开头的国家/As
地区应在数字上排在第一位,然后是以 开头的国家/地区Ge
,最后是以 开头的国家/地区Fr
。
如果我需要在该国家/地区使用 1 种模式搜索进行订购,我可以使用以下代码来实现:
SELECT * FROM Customers
ORDER BY (CASE WHEN Country LIKE 'Fr%' THEN 0
ELSE 1
END)ASC;
Run Code Online (Sandbox Code Playgroud)
如何在该ORDER BY
条款中再添加 2 个条件?谢谢。
我在Oracle中对此感到困惑
select case when 'hello' <> '' then 1 else 2 end from dual;
Run Code Online (Sandbox Code Playgroud)
返回2
select case when 'hello' <> 'hello' then 1 else 2 end from dual;
Run Code Online (Sandbox Code Playgroud)
返回2
然而,SQL*Server
这在预期的工作.
我有一个场景,我需要在where子句中使用的列根据变量的值更改.
例如,如果@ID与Table1中的TableID匹配,那么我将使用下面的代码
WHERE
Table1.TableID = CASE WHEN @ID= -1 THEN Table1.TableID ELSE @ID END
Run Code Online (Sandbox Code Playgroud)
但是,如果@ID匹配Table2的TableID,那么我需要使用
WHERE
Table2.TableID = CASE WHEN @ID= -1 THEN Table2.TableID ELSE @ID END
Run Code Online (Sandbox Code Playgroud)
我将如何做到这一点?OR子句在这种情况下是否有效?
编辑:尝试提供更多细节,使其更清晰.样本数据
表格1
TableID
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
表2
TableID
10
11
12
13
Run Code Online (Sandbox Code Playgroud)
如果@ID = -1我想看到两个表中的所有行.
如果@ID = 1则仅显示表1中的第一行
如果@ID = 10,那么只显示表2中的最后一行......依此类推.
注意:谢谢你告诉我,无论我怎么写,这都会毫无保留,我问的原因是因为它与我的大学任务类似,我想让我的讲师开心,是否有更"可读"代码或更好的东西,这将使我的讲师更快乐或这个代码是好的,而不是"低效".
我有一个关于我应该如何编写代码的问题,基本上我有一个switch语句,用于将char更改为特定的char,具体取决于它所处的内容.但是只有当亚麻布是一个奇数时才会改变(从0开始,所以每第二行都会选择一个新的字符).目前我的代码是......
int linenumber;
char zone = UNKNOWN;
for (linenumber = 0; linenumber < 21; linenumber++) {
switch (linenumber) {
case (1):
zone = 'a';
break;
case (3):
zone = 'b';
break;
case (5):
zone = 'c';
break;
case (7):
zone == 'd';
break;
case (9):
zone = 'e';
break;
case (11):
zone = 'f';
break;
case (13):
zone = 'g';
break;
case (15):
zone = 'h';
break;
case (17):
zone = 'i';
break;
case (19):
zone = 'j';
break; …
Run Code Online (Sandbox Code Playgroud) 这是我的SQL查询:
SELECT *
,CASE WHEN (ETA>10 OR Class='EOL') THEN 'Eligible' ELSE 'Not Applicable' END AS Eligible
FROM XYZtable
Run Code Online (Sandbox Code Playgroud)
结果是:
PN PD ETA Class BU Serial Comm frmToday Eligible
CX CRD 03-10 IP 07 2322 CARD 3 Not Applicable
BX CRD 03-18 IP 05 2324 CARD 11 Eligible
MX CRD 03-10 EOL 07 2325 CARD 3 Not Applicable
Run Code Online (Sandbox Code Playgroud)
我想在Eligible
列中提到以下结果:
If ETA > 10 THEN 'Eligible'
If Class = 'EOL' THEN 'Consult Plz'
Else 'Not Applicable'
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个我想运行的SQL查询,如果我将参数标记为true,则想要在where子句中添加一些内容.我不认为我需要两次相同的sql语句,但找不到这样做的方法.这就是我要的.
DECLARE @getShipped VARCHAR = 'false';
SELECT DISTINCT
Serial_No
INTO #Serials
FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= @dateEnding
*** AND IF @getShipped = 'true' THEN CC.Container_Status = 'Shipped' ***
Run Code Online (Sandbox Code Playgroud)
尝试过if语句和case语句但似乎无法使其工作?如果我没有,我只是不想重复sql.
使用CASE ... WHEN声明我有一个艰难的世界.
我正在为我的公司建立一个小型数据库,我们正在查看销售订单.默认情况下,我们的跟踪系统将我们的订单分为10类,但我们主要关注3:A,B和C订单.我的代码看起来像:
SELECT
ORDER_NUM,
BUYER_NUM,
CREATOR_NUM
(CASE
WHEN ORDER_CD = 'A' THEN 'Part'
WHEN ORDER_CD = 'B' THEN 'Service'
WHEN ORDER_CD = 'C' THEN 'Labor'
ELSE 'Other'
) AS ORDER_TYPE
FROM tbl_ORDER
WHERE ORDER_DATE > '01-Jan-2017'
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到"Missing Expression"错误.有人可以帮我理解我做错了什么吗?
谢谢!
我有这个switch case statement
在我的FragmentStatePagerAdapter
.我已经研究了许多类似的问题,但没有一个提供更短的答案,这意味着switch
案例仍然在他们的代码中.
这段代码看起来非常重复和丑陋.有没有办法让这个看起来更短?
@Override
public SongListFragment getItem(int position) {
SongListFragment slf = new SongListFragment();
switch (position) {
case 0:
slf.setAudioList(getAudioList(tabTitles[0]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 1:
slf.setAudioList(getAudioList(tabTitles[1]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 2:
slf.setAudioList(getAudioList(tabTitles[2]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 3:
slf.setAudioList(getAudioList(tabTitles[3]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() …
Run Code Online (Sandbox Code Playgroud) SQL 服务器 2012
我将收取的费用根据客户成为客户的时间长短乘以不同的因素。该group by
条款相当直接。但是,select
当我想以不同的方式使用此标准时,我会感到尴尬:
select mp.professionals
,case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end age -- straight forward
,case (case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end) -- nested case
when 'New' then sum(fees) * 0.5
when 'Old' then sum(fees) * 0.25
else 0
end Credit
,case (case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end) -- nested case
when 'New' then 'Welcome!'
when …
Run Code Online (Sandbox Code Playgroud) 我已经尝试过下面的代码,但它抛出一个错误:
SELECT Publisher, SUM(Global_Sales) AS total_games_sold, Year,
CASE
WHEN Year < 1989 THEN SUM(Global_Sales)
WHEN Year BETWEEN 1990 AND 1999 THEN SUM(Global_Sales)
WHEN Year BETWEEN 2000 AND 2009 THEN SUM(Global_Sales)
ELSE Year > 2009 END AS Dates
FROM Vgsales
ORDER BY Year;
Run Code Online (Sandbox Code Playgroud) case ×10
sql ×7
sql-server ×5
database ×2
if-statement ×2
oracle ×2
between ×1
c ×1
date ×1
java ×1
join ×1
mysql ×1
performance ×1
sql-order-by ×1
t-sql ×1
where ×1
where-clause ×1