我有一个非常困难的问题,我不知道如何处理它。我很乐意收到一些建议。
我有一张很长的桌子,其中包含有关特定住宅居民的详细信息。有些栏目对所有居民都很常见,有些则是个人。区别在于一组数字。例如 - 包含01(CarMake01,Phone01等)的所有字段代表第一个人。包含02的所有字段代表第二人,依此类推。没有数字的领域很常见(城市,街道等)。
我的目标是运行一个查询,该查询接受这个长表并创建一个新表,其中只包含公共字段和包含特定数字(01,02等)的字段。这是当前表的代码。我希望我足够清楚。我应该使用枢轴还是其他功能?
CREATE TABLE [dbo].[FamiliesStageA](
[Hhid] [int] NOT NULL,
[AssignedUser] [int] NULL,
[Hhphone] [nvarchar](11) NULL,
[FamilyName] [nvarchar](50) NULL,
[City] [int] NULL,
[Street] [int] NULL,
[HouseNum] [int] NULL,
[Hhsize] [int] NULL,
[NumCar] [int] NULL,
[CarYear] [int] NULL,
[CarMake01] [int] NULL,
[CarMake02] [int] NULL,
[CarMake03] [int] NULL,
[CarMake04] [int] NULL,
[CarMake05] [int] NULL,
[CarModel01] [int] NULL,
[CarModel02] [int] NULL,
[CarModel03] [int] NULL,
[CarModel04] [int] NULL,
[CarModel05] [int] NULL,
[PersonID01] [int] NULL,
[PersonID02] [int] NULL,
[PersonID03] [int] NULL,
[PersonID04] [int] NULL,
[PersonID05] [int] NULL,
[PersonID06] [int] NULL,
[PersonID07] [int] NULL,
[PersonID08] [int] NULL,
[PesonID09] [int] NULL,
[PesonID10] [int] NULL,
[PersonID11] [int] NULL,
[PersonID12] [int] NULL,
[PersonID13] [int] NULL,
[PersonID14] [int] NULL,
[PersonID15] [int] NULL,
[Phone01] [int] NULL,
[Phone02] [int] NULL,
[Phone03] [int] NULL,
[Phone04] [int] NULL,
[Phone05] [int] NULL,
[Phone06] [int] NULL,
[Phone07] [int] NULL,
[Phone08] [int] NULL,
[Phone09] [int] NULL,
[Phone10] [int] NULL,
[Phone11] [int] NULL,
[Phone12] [int] NULL,
[Phone13] [int] NULL,
[Phone14] [int] NULL,
[Phone15] [int] NULL,
[FirstName01] [int] NULL,
[FirstName02] [int] NULL,
[FirstName03] [int] NULL,
[FirstName04] [int] NULL,
[FirstName05] [int] NULL,
[FirstName06] [int] NULL,
[FirstName07] [int] NULL,
[FirstName08] [int] NULL,
[FirstName09] [int] NULL,
[FirstName10] [int] NULL,
[FirstName11] [int] NULL,
[FirstName12] [int] NULL,
[FirstName13] [int] NULL,
[FirstName14] [int] NULL,
[FirstName15] [int] NULL,
[SleepHome01] [int] NULL,
[SleepHome02] [int] NULL,
[SleepHome03] [int] NULL,
[SleepHome04] [int] NULL,
[SleepHome05] [int] NULL,
[SleepHome06] [int] NULL,
[SleepHome07] [int] NULL,
[SleepHome08] [int] NULL,
[SleepHome09] [int] NULL,
[SleepHome10] [int] NULL,
[SleepHome11] [int] NULL,
[SleepHome12] [int] NULL,
[SleepHome13] [int] NULL,
[SleepHome14] [int] NULL,
[SleepHome15] [int] NULL,
[DateOfBirth01] [date] NULL,
[DateOfBirth02] [date] NULL,
[DateOfBirth03] [date] NULL,
[DateOfBirth04] [date] NULL,
[DateOfBirth05] [date] NULL,
[DateOfBirth06] [date] NULL,
[DateOfBirth07] [date] NULL,
[DateOfBirth08] [date] NULL,
[DateOfBirth09] [date] NULL,
[DateOfBirth10] [date] NULL,
[DateOfBirth11] [date] NULL,
[DateOfBirth12] [date] NULL,
[DateOfBirth13] [date] NULL,
[DateOfBirth14] [date] NULL,
[DateOfBirth15] [date] NULL,
[License01] [int] NULL,
[License02] [int] NULL,
[License03] [int] NULL,
[License04] [int] NULL,
[License05] [int] NULL,
[License06] [int] NULL,
[License07] [int] NULL,
[License08] [int] NULL,
[License09] [int] NULL,
[License10] [int] NULL,
[License11] [int] NULL,
[License12] [int] NULL,
[License13] [int] NULL,
[License14] [int] NULL,
[License15] [int] NULL,
[MainTransportMode01] [int] NULL,
[MainTransportMode02] [int] NULL,
[MainTransportMode03] [int] NULL,
[MainTransportMode04] [int] NULL,
[MainTransportMode05] [int] NULL,
[MainTransportMode06] [int] NULL,
[MainTransportMode07] [int] NULL,
[MainTransportMode08] [int] NULL,
[MainTransportMode09] [int] NULL,
[MainTransportMode10] [int] NULL,
[MainTransportMode11] [int] NULL,
[MainTransportMode12] [int] NULL,
[MainTransportMode13] [int] NULL,
[MainTransportMode14] [int] NULL,
[MainTransportMode15] [int] NULL
答案 0 :(得分:0)
这实际上不会创建表,但它会为您提供数据:我修复了原始代码(PersonID,而不是PesonID)中的一些拼写错误,但是否则它们是相同的。
请注意,由于您没有提供任何样本数据而且我不打算尝试加载所有数据,我无法针对任何内容进行测试 - 请查看其准确性并告诉我是否存在有任何问题。如果您不需要临时表,请将其注释掉,并用实际表替换对它的引用。
--DROP TABLE #FamiliesStageA
CREATE TABLE #FamiliesStageA(
[Hhid] [int] NOT NULL,
[AssignedUser] [int] NULL,
[Hhphone] [nvarchar](11) NULL,
[FamilyName] [nvarchar](50) NULL,
[City] [int] NULL,
[Street] [int] NULL,
[HouseNum] [int] NULL,
[Hhsize] [int] NULL,
[NumCar] [int] NULL,
[CarYear] [int] NULL,
[CarMake01] [int] NULL,
[CarMake02] [int] NULL,
[CarMake03] [int] NULL,
[CarMake04] [int] NULL,
[CarMake05] [int] NULL,
[CarModel01] [int] NULL,
[CarModel02] [int] NULL,
[CarModel03] [int] NULL,
[CarModel04] [int] NULL,
[CarModel05] [int] NULL,
[PersonID01] [int] NULL,
[PersonID02] [int] NULL,
[PersonID03] [int] NULL,
[PersonID04] [int] NULL,
[PersonID05] [int] NULL,
[PersonID06] [int] NULL,
[PersonID07] [int] NULL,
[PersonID08] [int] NULL,
[PersonID09] [int] NULL,
[PersonID10] [int] NULL,
[PersonID11] [int] NULL,
[PersonID12] [int] NULL,
[PersonID13] [int] NULL,
[PersonID14] [int] NULL,
[PersonID15] [int] NULL,
[Phone01] [int] NULL,
[Phone02] [int] NULL,
[Phone03] [int] NULL,
[Phone04] [int] NULL,
[Phone05] [int] NULL,
[Phone06] [int] NULL,
[Phone07] [int] NULL,
[Phone08] [int] NULL,
[Phone09] [int] NULL,
[Phone10] [int] NULL,
[Phone11] [int] NULL,
[Phone12] [int] NULL,
[Phone13] [int] NULL,
[Phone14] [int] NULL,
[Phone15] [int] NULL,
[FirstName01] [int] NULL,
[FirstName02] [int] NULL,
[FirstName03] [int] NULL,
[FirstName04] [int] NULL,
[FirstName05] [int] NULL,
[FirstName06] [int] NULL,
[FirstName07] [int] NULL,
[FirstName08] [int] NULL,
[FirstName09] [int] NULL,
[FirstName10] [int] NULL,
[FirstName11] [int] NULL,
[FirstName12] [int] NULL,
[FirstName13] [int] NULL,
[FirstName14] [int] NULL,
[FirstName15] [int] NULL,
[SleepHome01] [int] NULL,
[SleepHome02] [int] NULL,
[SleepHome03] [int] NULL,
[SleepHome04] [int] NULL,
[SleepHome05] [int] NULL,
[SleepHome06] [int] NULL,
[SleepHome07] [int] NULL,
[SleepHome08] [int] NULL,
[SleepHome09] [int] NULL,
[SleepHome10] [int] NULL,
[SleepHome11] [int] NULL,
[SleepHome12] [int] NULL,
[SleepHome13] [int] NULL,
[SleepHome14] [int] NULL,
[SleepHome15] [int] NULL,
[DateOfBirth01] [date] NULL,
[DateOfBirth02] [date] NULL,
[DateOfBirth03] [date] NULL,
[DateOfBirth04] [date] NULL,
[DateOfBirth05] [date] NULL,
[DateOfBirth06] [date] NULL,
[DateOfBirth07] [date] NULL,
[DateOfBirth08] [date] NULL,
[DateOfBirth09] [date] NULL,
[DateOfBirth10] [date] NULL,
[DateOfBirth11] [date] NULL,
[DateOfBirth12] [date] NULL,
[DateOfBirth13] [date] NULL,
[DateOfBirth14] [date] NULL,
[DateOfBirth15] [date] NULL,
[License01] [int] NULL,
[License02] [int] NULL,
[License03] [int] NULL,
[License04] [int] NULL,
[License05] [int] NULL,
[License06] [int] NULL,
[License07] [int] NULL,
[License08] [int] NULL,
[License09] [int] NULL,
[License10] [int] NULL,
[License11] [int] NULL,
[License12] [int] NULL,
[License13] [int] NULL,
[License14] [int] NULL,
[License15] [int] NULL,
[MainTransportMode01] [int] NULL,
[MainTransportMode02] [int] NULL,
[MainTransportMode03] [int] NULL,
[MainTransportMode04] [int] NULL,
[MainTransportMode05] [int] NULL,
[MainTransportMode06] [int] NULL,
[MainTransportMode07] [int] NULL,
[MainTransportMode08] [int] NULL,
[MainTransportMode09] [int] NULL,
[MainTransportMode10] [int] NULL,
[MainTransportMode11] [int] NULL,
[MainTransportMode12] [int] NULL,
[MainTransportMode13] [int] NULL,
[MainTransportMode14] [int] NULL,
[MainTransportMode15] [int] NULL)
SELECT
Family.HHID,
AssignedUser,
HHPhone,
FamilyName,
City,
Street,
HouseNum,
HHSize,
NumCar,
CarYear,
CarMake.CarMake,
CarModel.CarModel,
PersonID.PersonID,
Phone.Phone,
FirstName.FirstName,
SleepHome.SleepHome,
DateOfBirth.DateOfBirth,
License.License,
MainTransportMode.MainTransportMode
FROM
#FamiliesStageA Family
INNER JOIN
(
SELECT 1 AS Number UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION
SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION
SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15
) Nums ON 1=1
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
CarMake
FROM #FamiliesStageA
UNPIVOT
(CarMake FOR COL IN
([CarMake01], [CarMake02], [CarMake03], [CarMake04], [CarMake05])
) UP
) CarMake ON
Family.HHID = CarMake.Hhid AND
Nums.Number = CarMake.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
CarModel
FROM #FamiliesStageA
UNPIVOT
(CarModel FOR COL IN
(
[CarModel01], [CarModel02], [CarModel03], [CarModel04], [CarModel05])
) UP
) CarModel ON
Family.HHID = CarModel.Hhid AND
Nums.Number = CarModel.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
PersonID
FROM #FamiliesStageA
UNPIVOT
(PersonID FOR COL IN
(
[PersonID01], [PersonID02], [PersonID03], [PersonID04], [PersonID05],
[PersonID06], [PersonID07], [PersonID08], [PersonID09], [PersonID10],
[PersonID11], [PersonID12], [PersonID13], [PersonID14], [PersonID15])
) UP
) PersonID ON
Family.HHID = PersonID.Hhid AND
Nums.Number = PersonID.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
Phone
FROM #FamiliesStageA
UNPIVOT
(Phone FOR COL IN
(
[Phone01], [Phone02], [Phone03], [Phone04], [Phone05],
[Phone06], [Phone07], [Phone08], [Phone09], [Phone10],
[Phone11], [Phone12], [Phone13], [Phone14], [Phone15])
) UP
) Phone ON
Family.HHID = Phone.Hhid AND
Nums.Number = Phone.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
FirstName
FROM #FamiliesStageA
UNPIVOT
(FirstName FOR COL IN
(
[FirstName01], [FirstName02], [FirstName03], [FirstName04], [FirstName05],
[FirstName06], [FirstName07], [FirstName08], [FirstName09], [FirstName10],
[FirstName11], [FirstName12], [FirstName13], [FirstName14], [FirstName15])
) UP
) FirstName ON
Family.HHID = FirstName.Hhid AND
Nums.Number = FirstName.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
SleepHome
FROM #FamiliesStageA
UNPIVOT
(SleepHome FOR COL IN
(
[SleepHome01], [SleepHome02], [SleepHome03], [SleepHome04], [SleepHome05],
[SleepHome06], [SleepHome07], [SleepHome08], [SleepHome09], [SleepHome10],
[SleepHome11], [SleepHome12], [SleepHome13], [SleepHome14], [SleepHome15])
) UP
) SleepHome ON
Family.HHID = SleepHome.Hhid AND
Nums.Number = SleepHome.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
DateOfBirth
FROM #FamiliesStageA
UNPIVOT
(DateOfBirth FOR COL IN
(
[DateOfBirth01], [DateOfBirth02], [DateOfBirth03], [DateOfBirth04], [DateOfBirth05],
[DateOfBirth06], [DateOfBirth07], [DateOfBirth08], [DateOfBirth09], [DateOfBirth10],
[DateOfBirth11], [DateOfBirth12], [DateOfBirth13], [DateOfBirth14], [DateOfBirth15])
) UP
) DateOfBirth ON
Family.HHID = DateOfBirth.Hhid AND
Nums.Number = DateOfBirth.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
License
FROM #FamiliesStageA
UNPIVOT
(License FOR COL IN
(
[License01], [License02], [License03], [License04], [License05],
[License06], [License07], [License08], [License09], [License10],
[License11], [License12], [License13], [License14], [License15])
) UP
) License ON
Family.HHID = License.Hhid AND
Nums.Number = License.PersonNum
LEFT JOIN
(
SELECT
HHID,
RIGHT(UP.COL,2) AS PersonNum,
MainTransportMode
FROM #FamiliesStageA
UNPIVOT
(MainTransportMode FOR COL IN
(
[MainTransportMode01], [MainTransportMode02], [MainTransportMode03], [MainTransportMode04], [MainTransportMode05],
[MainTransportMode06], [MainTransportMode07], [MainTransportMode08], [MainTransportMode09], [MainTransportMode10],
[MainTransportMode11], [MainTransportMode12], [MainTransportMode13], [MainTransportMode14], [MainTransportMode15])
) UP
) MainTransportMode ON
Family.HHID = MainTransportMode.Hhid AND
Nums.Number = MainTransportMode.PersonNum