我有2个表,其中一个是主要的,另一个是详细信息。他们有一对多的关系:
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
数据的外观如下:
MasterTable
------------
id (pk)
col1
DetailTable
------------
id (pk)
mid (fk to MasterTable id)
col1
对于详细信息表,col1的可能值为:
然后我需要创建一个查询,该查询将为主表中的每个id进行布局,以查看它们是否具有这些值中的任何一个。所以最终的查询结果如下所示:
MasterTable
ID
---
1
2
3
4
5
DetailTable
ID | MID | COL1 |
---|-------|-------|
1 1 BIRD
2 1 DOG
3 1 DOG --Duplicates are allowed for the same MID
4 1 CAT
5 2 CAT
6 5 FISH
所以我在最终结果中将详细信息表折叠成一行。我不确定如何创建此查询。
我正在尝试这样的事情,但它不起作用:
MasterID | BIRD | DOG | CAT | FISH | MOUSE
-----------------------------------------------------
1 Y Y Y
2 Y
3
4
5 Y
答案 0 :(得分:3)
透视,无论是使用PIVOT
运算符(从Oracle版本11.1开始)还是使用条件聚合(版本10.2或更早版本),都可以在任何行集上运行,无论是单个表,连接两个表的结果,或SQL中允许的任何其他设置操作的结果(另一个聚合,UNION ALL
或其他任何内容)。
你的尝试非常接近。您所要做的就是GROUP BY MASTERTABLE.ID
(因为您只需要每MASTERTABLE.ID
行一行)并获取所有MAX
表达式的CASE
:如果至少有一个'Y'
它们是MAX
,'Y'
是NULL
,否则是CASE .... END as BIRD
。
所以:
在您的查询中,完全按照原样,
MAX(CASE ... END) as BIRD
更改为GROUP BY MASTERTABLE.ID
launchy