SELECT
CASE Avalue
WHEN Avalue = 0 THEN ‘没数据’
WHEN Avalue > 100 THEN ‘超出范围’
WHEN Avalue < 50 THEN ‘太小’
ELSE ‘其他’
END
FROM ATable
这个查询是错误的,因为CASE中不能使用比较运算符。但是,我们可以使用一些技巧达到选择范围的作用:
SELECT
CASE Avalue
WHEN 0 THEN ‘没数据’
ELSE
(
CASE SIGN(100- Avalue)
WHEN –1 THEN ‘超出范围’
ELSE
(
CASE SIGN(50- Avalue)
WHEN 1 THEN ‘太小’
ELSE ‘其他’
END
)
END
)
END
FROM ATable
SELECT
UserID AS “用户编号”,
SUM(CASE usertype WHEN 1 THEN account ELSE 0 END) AS “普通用户金额”,
SUM(CASE usertype WHEN 2 THEN account ELSE 0 END) AS “VIP用户金额”
FROM Atable
GROUP BY UserID
INSERT INTO Temp_UserName -- Temp_UserName是一个临时表,这条语句也可以省略
SELECT UserName
FROM User_Info
WHERE –一些过滤条件;
--先更新存在的记录
UPDATE A
SET (Field1, Field2) = (SELECT Field3, Field4 FROM User_Info WHERE EXISTS(SELECT 1 FROM User_Info WHERE UserName=A.UserName))
WHERE EXISTS(SELECT 1 FROM Temp_UserName WHERE UserName=A.UserName)
--插入不存在的记录
INSERT INTO A (Field1, Field2, UserName)
SELECT u.Field3, u.Field4, UserName
FROM User_Info u LEFT OUTER JOIN A ON u.UserName=A.UserName AND A.UserName IS NULL
WHERE EXISTS(SELECT 1 FROM Temp_UserName WHERE UserName=A.UserName)