【发布时间】:2011-03-10 22:41:06
【问题描述】:
我有两张桌子:
父母信息和依赖信息
表结构如下:
家长
ID | First | Last | DOB | Address
-------------------------------------------------
1 | John | Doe | 1980-01-01 | 123 street
2 | Ryan | Mack | 1974-12-12 | 444 Place
家属
ParentID | Type | First | Last | DOB
--------------------------------------------------
1 | Spouse | Jane | Doe | 1981-02-01
1 | Child | Mike | Doe | 1999-08-01
1 | Child | Zoe | Doe | 2002-04-01
2 | Spouse | Sarah | Mack | 1964-01-01
2 | Child | Andrew | Mack | 1997-05-01
我想构建一个查询(理想情况下,带有连接的单个调用会返回以下内容:
表格结果
First | Last | Type | DOB | Address
----------------------------------------------------------------
John | Doe | Parent | 1980-01-01 | 123 Street
Jane | Doe | Spouse | 1981-02-01 | 123 Street
Mike | Doe | Child | 1999-08-01 | 123 street
Zoe | Doe | Child | 2002-04-01 | 123 Street
Ryan | Mack | Parent | 1974-12-12 | 444 Place
Sarah | Mack | Spouse | 1964-01-01 | 444 Place
Andrew | Mack | Child | 1997-05-01 | 444 Place
我可以在另一个 SO 用户的帮助下使用以下查询构建上面的表格:
SELECT t.First, t.Last, t.Type, t.DOB, t.Address
FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey
FROM Parent
UNION ALL
SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,
CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey
FROM Dependents d
INNER JOIN Parent p
ON d.ParentID = p.ID) t
ORDER BY t.ID, t.SortKey
我正在尝试解决一个(可能)更大的问题,因为我必须根据几个参数计算特定成员 ID 的每条记录。
父母永远是1, 配偶将始终为 2(如果存在) 孩子将从 3 岁开始,一直持续到不再有(如果有的话)。
我的茶几看起来像:
First | Last | Type | DOB | Address | Count
---------------------------------------------------------------------------
John | Doe | Parent | 1980-01-01 | 123 Street | 1
Jane | Doe | Spouse | 1981-02-01 | 123 Street | 2
Mike | Doe | Child | 1999-08-01 | 123 street | 3
Zoe | Doe | Child | 2002-04-01 | 123 Street | 4
Ryan | Mack | Parent | 1974-12-12 | 444 Place | 1
Sarah | Mack | Spouse | 1964-01-01 | 444 Place | 2
Andrew | Mack | Child | 1997-05-01 | 444 Place | 3
我知道我可以在调用的顶部设置一个用户变量说:
SET @counter:= 0;
那么 @counter:=@counter+1 作为计数器,
但这只会在整个 sql 查询中继续计数,而不是按 ID。
有什么想法吗?
【问题讨论】: