SQL:更改 SELECT 查询以根据 B 列中的布尔值在 A 列上显示不同的值
SQL: Changing SELECT Query to Show Different Values on Column A based off Boolean in Column B
我有一个生成此输出的 SQL 查询:
如果“CROSSDOMAIN”列的值为 true?
,我将如何调整我的查询以使“SCORE”列的值增加 3 我在想我会用另一个处理这种情况的查询来包装我现有的查询,但我不确定那个查询是什么。
我现有的查询如下(不是最漂亮的,但有效):
SELECT HORSUM.TEAMNAME, HORSUM.EMAIL1, SUM(HORSUM.TOTALSUM) Score, COUNT(*) Count, TEAM.THEME, TEAM.FINALIST, TEAM.WINNER, TEAM.CROSSDOMAIN
FROM
(SELECT "JUDGEEMAIL", "TEAMNAME", "EMAIL1", "DEVOPSPRACTICES" + "BUSINESSIMPACT" +
"NEWSKILLS" + "EXECUTION"
+ "INNOVATION" + "CLARITY" as totalSum
FROM "DOMAINSCORES") AS HORSUM
INNER JOIN (SELECT "THEME", "TEAMNAME" as nameID, "FINALIST", "WINNER", "CROSSDOMAIN" FROM "TEAMS" WHERE "FINALIST" = True) AS TEAM ON HORSUM.TEAMNAME = TEAM.nameID
GROUP BY "TEAMNAME", EMAIL1, THEME, FINALIST, WINNER, CROSSDOMAIN
ORDER BY Score DESC;
编辑:我已经按照 Michael 的建议尝试了这个查询,但出现语法错误。我还想补充一点,我使用的是 IBM 的 DB2,如果这有所不同的话。
SELECT HORSUM.TEAMNAME
, HORSUM.EMAIL1
, case
when TEAM.CROSSDOMAIN = 'true'
then SUM(HORSUM.TOTALSUM) + 3
else SUM(HORSUM.TOTALSUM)
end as Score
, COUNT(*) Count
, TEAM.THEME
, TEAM.FINALIST
, TEAM.WINNER
, TEAM.CROSSDOMAIN
FROM
(SELECT HORSUM.TEAMNAME, HORSUM.EMAIL1, SUM(HORSUM.TOTALSUM) Score, COUNT(*) Count, TEAM.THEME, TEAM.FINALIST, TEAM.WINNER, TEAM.CROSSDOMAIN
FROM
(SELECT "JUDGEEMAIL", "TEAMNAME", "EMAIL1", "DEVOPSPRACTICES" + "BUSINESSIMPACT" +
"NEWSKILLS" + "EXECUTION"
+ "INNOVATION" + "CLARITY" as totalSum
FROM "DOMAINSCORES") AS HORSUM
INNER JOIN (SELECT "THEME", "TEAMNAME" as nameID, "FINALIST", "WINNER", "CROSSDOMAIN" FROM "TEAMS" WHERE "FINALIST" = True) AS TEAM ON HORSUM.TEAMNAME = TEAM.nameID
GROUP BY "TEAMNAME", EMAIL1, THEME, FINALIST, WINNER, CROSSDOMAIN)
ORDER BY Score DESC;
试试这个作为外部 SELECT
SELECT HORSUM.TEAMNAME
, HORSUM.EMAIL1
, case
when TEAM.CROSSDOMAIN = 'true'
then SUM(HORSUM.TOTALSUM) + 3
else SUM(HORSUM.TOTALSUM)
end as Score
, COUNT(*) Count
, TEAM.THEME
, TEAM.FINALIST
, TEAM.WINNER
, TEAM.CROSSDOMAIN
...
我有一个生成此输出的 SQL 查询:
如果“CROSSDOMAIN”列的值为 true?
,我将如何调整我的查询以使“SCORE”列的值增加 3 我在想我会用另一个处理这种情况的查询来包装我现有的查询,但我不确定那个查询是什么。
我现有的查询如下(不是最漂亮的,但有效):
SELECT HORSUM.TEAMNAME, HORSUM.EMAIL1, SUM(HORSUM.TOTALSUM) Score, COUNT(*) Count, TEAM.THEME, TEAM.FINALIST, TEAM.WINNER, TEAM.CROSSDOMAIN
FROM
(SELECT "JUDGEEMAIL", "TEAMNAME", "EMAIL1", "DEVOPSPRACTICES" + "BUSINESSIMPACT" +
"NEWSKILLS" + "EXECUTION"
+ "INNOVATION" + "CLARITY" as totalSum
FROM "DOMAINSCORES") AS HORSUM
INNER JOIN (SELECT "THEME", "TEAMNAME" as nameID, "FINALIST", "WINNER", "CROSSDOMAIN" FROM "TEAMS" WHERE "FINALIST" = True) AS TEAM ON HORSUM.TEAMNAME = TEAM.nameID
GROUP BY "TEAMNAME", EMAIL1, THEME, FINALIST, WINNER, CROSSDOMAIN
ORDER BY Score DESC;
编辑:我已经按照 Michael 的建议尝试了这个查询,但出现语法错误。我还想补充一点,我使用的是 IBM 的 DB2,如果这有所不同的话。
SELECT HORSUM.TEAMNAME
, HORSUM.EMAIL1
, case
when TEAM.CROSSDOMAIN = 'true'
then SUM(HORSUM.TOTALSUM) + 3
else SUM(HORSUM.TOTALSUM)
end as Score
, COUNT(*) Count
, TEAM.THEME
, TEAM.FINALIST
, TEAM.WINNER
, TEAM.CROSSDOMAIN
FROM
(SELECT HORSUM.TEAMNAME, HORSUM.EMAIL1, SUM(HORSUM.TOTALSUM) Score, COUNT(*) Count, TEAM.THEME, TEAM.FINALIST, TEAM.WINNER, TEAM.CROSSDOMAIN
FROM
(SELECT "JUDGEEMAIL", "TEAMNAME", "EMAIL1", "DEVOPSPRACTICES" + "BUSINESSIMPACT" +
"NEWSKILLS" + "EXECUTION"
+ "INNOVATION" + "CLARITY" as totalSum
FROM "DOMAINSCORES") AS HORSUM
INNER JOIN (SELECT "THEME", "TEAMNAME" as nameID, "FINALIST", "WINNER", "CROSSDOMAIN" FROM "TEAMS" WHERE "FINALIST" = True) AS TEAM ON HORSUM.TEAMNAME = TEAM.nameID
GROUP BY "TEAMNAME", EMAIL1, THEME, FINALIST, WINNER, CROSSDOMAIN)
ORDER BY Score DESC;
试试这个作为外部 SELECT
SELECT HORSUM.TEAMNAME
, HORSUM.EMAIL1
, case
when TEAM.CROSSDOMAIN = 'true'
then SUM(HORSUM.TOTALSUM) + 3
else SUM(HORSUM.TOTALSUM)
end as Score
, COUNT(*) Count
, TEAM.THEME
, TEAM.FINALIST
, TEAM.WINNER
, TEAM.CROSSDOMAIN
...