查询多行 SQL Where 子句
Query for Multiple row SQL Where clause
需要一个查询的帮助,该查询根据某种条件从多行中获取结果。例如我们有 table 有 [Roll no] 有 [subjects]。 Table 同一个 [Roll No] 可以有多个记录。我的要求是,如果学生只选择 'English',那么结果应该 return 'E',如果数学,则 'M',如果两者都选择,则 'B'.
// 我想这就是你想要的。
INSERT INTO dbo.rolls
( name, subject )
VALUES ( 'Jones', 'English'),
( 'Smith', 'Math'),
('Adams','English'),
('Adams', 'Math')
GO
;WITH CTE AS (
SELECT subquery1.name, 'B' AS code FROM (
SELECT name,COUNT(name) AS cnt
FROM rolls
WHERE subject = 'English' OR subject = 'Math'
GROUP BY name
HAVING COUNT(name) > 1 ) AS subquery1
UNION
SELECT subquery2.name, SUBSTRING(rolls.subject,1,1) AS code FROM (
SELECT name,COUNT(name) AS cnt
FROM rolls
WHERE subject = 'English' OR subject = 'Math'
GROUP BY name
HAVING COUNT(name) = 1 ) AS subquery2
INNER JOIN dbo.rolls
ON rolls.name = subquery2.name
)
SELECT * FROM CTE
需要一个查询的帮助,该查询根据某种条件从多行中获取结果。例如我们有 table 有 [Roll no] 有 [subjects]。 Table 同一个 [Roll No] 可以有多个记录。我的要求是,如果学生只选择 'English',那么结果应该 return 'E',如果数学,则 'M',如果两者都选择,则 'B'.
// 我想这就是你想要的。
INSERT INTO dbo.rolls
( name, subject )
VALUES ( 'Jones', 'English'),
( 'Smith', 'Math'),
('Adams','English'),
('Adams', 'Math')
GO
;WITH CTE AS (
SELECT subquery1.name, 'B' AS code FROM (
SELECT name,COUNT(name) AS cnt
FROM rolls
WHERE subject = 'English' OR subject = 'Math'
GROUP BY name
HAVING COUNT(name) > 1 ) AS subquery1
UNION
SELECT subquery2.name, SUBSTRING(rolls.subject,1,1) AS code FROM (
SELECT name,COUNT(name) AS cnt
FROM rolls
WHERE subject = 'English' OR subject = 'Math'
GROUP BY name
HAVING COUNT(name) = 1 ) AS subquery2
INNER JOIN dbo.rolls
ON rolls.name = subquery2.name
)
SELECT * FROM CTE