Entity
私の目標は、2 人で構成されるすべての世帯のテーブルに HouseholdName フィールドを計算して設定することです。私は SQL Server 2012 を使用しており、使用する必要があるスキーマは次のとおりです。
CREATE TABLE Entity
(
EID INT, --PK
PID INT, --FK to Person.[Person ID]
HouseholdID VARCHAR(50),
HouseholdName VARCHAR(300)
);
CREATE TABLE Person
(
[Person ID] INT,
FirstName VARCHAR(30),
LastName VARCHAR(30)
);
INSERT INTO Entity VALUES (1,1,'HH1',NULL);
INSERT INTO Entity VALUES (2,2,'HH1',NULL);
INSERT INTO Entity VALUES (3,3,'HH2',NULL);
INSERT INTO Entity VALUES (4,4,'HH2',NULL);
INSERT INTO Entity VALUES (5,5,'HH3',NULL);
INSERT INTO Person VALUES (1,'Jane', 'Doe');
INSERT INTO Person VALUES (2,'Joe', 'Doe');
INSERT INTO Person VALUES (3,'Sara', 'Dillin');
INSERT INTO Person VALUES (4,'Bill', 'Smith');
INSERT INTO Person VALUES (5,'Ted', 'Loner');
世帯名を計算するロジックは次のとおりです。HouseholdID のように両方の姓が同じである場合HH1
、世帯名は「Jane & Joe Doe」になります。姓が異なる場合HH2
は、「Sara Dillin & Bill Smith」の形式にする必要があります。
人を特定して、次のように並べ替えることができます。
SELECT FirstName,LastName,HouseholdID
FROM Entity e
JOIN Person p ON p.[Person ID]=e.[PID]
WHERE HouseholdID IN --HHs of 2 people
(
SELECT DISTINCT HouseholdID
FROM Entity e
JOIN Person p ON p.[Person ID]=e.[PID]
GROUP BY HouseholdID HAVING COUNT(*)=2
)
ORDER BY HouseholdID
しかし、私はそれを過ぎて立ち往生しています。C# のような手続き型言語から、これを解決する方法を知っていますが、遅いです。より高速な SQL の方法でそれを実行できるようになりたいと思っています。