SQL 左连接案例语句
SQL left join case statement
需要一些帮助来计算 SQL。不幸的是,tsql 的版本是 SybaseASE,我不太熟悉,在 MS SQL 中,我会在子查询中使用 RANK() 或 ROW_NUMBER() 之类的窗口函数并加入这些结果。 ..
这是我要解决的问题
TABLE A
Id
1
2
3
TABLE B
Id,Type
1,A
1,B
1,C
2,A
2,B
3,A
3,C
4,B
4,C
我想 return 每个 ID 1 行,如果 ID 有一个应该显示的类型 'A' 记录,如果它有不同的类型那么没关系,但它不能为空(可以做一些任意排序,比如 alpha 优先 "other" return 值类型)
Results:
1, A
2, A
3, A
4, B
常规左连接(在 A.id = B.id 和 B.type = 'A' 上)几乎 return 是我正在寻找的东西 returns null 当我想要 'next available' 类型时。
您可以在子查询 (FirstTypeResult) 上使用 INNER JOIN,这将 return 每个 ID 的最小类型。
例如:
SELECT TABLEA.[Id], FirstTypeResult.[Type]
FROM TABLEA
JOIN (
SELECT [Id], Min([Type]) As [Type]
FROM TABLEB
GROUP BY [Id]
) FirstTypeResult ON FirstTypeResult.[Id] = TABLEA.[Id]
需要一些帮助来计算 SQL。不幸的是,tsql 的版本是 SybaseASE,我不太熟悉,在 MS SQL 中,我会在子查询中使用 RANK() 或 ROW_NUMBER() 之类的窗口函数并加入这些结果。 ..
这是我要解决的问题
TABLE A
Id
1
2
3
TABLE B
Id,Type
1,A
1,B
1,C
2,A
2,B
3,A
3,C
4,B
4,C
我想 return 每个 ID 1 行,如果 ID 有一个应该显示的类型 'A' 记录,如果它有不同的类型那么没关系,但它不能为空(可以做一些任意排序,比如 alpha 优先 "other" return 值类型)
Results:
1, A
2, A
3, A
4, B
常规左连接(在 A.id = B.id 和 B.type = 'A' 上)几乎 return 是我正在寻找的东西 returns null 当我想要 'next available' 类型时。
您可以在子查询 (FirstTypeResult) 上使用 INNER JOIN,这将 return 每个 ID 的最小类型。 例如:
SELECT TABLEA.[Id], FirstTypeResult.[Type]
FROM TABLEA
JOIN (
SELECT [Id], Min([Type]) As [Type]
FROM TABLEB
GROUP BY [Id]
) FirstTypeResult ON FirstTypeResult.[Id] = TABLEA.[Id]