這裏很多級聯的職位,但似乎無法找到解決這個:串聯多列到一個逗號分隔字符串,並插入到新表
ID:
我有20列的表山口1列2列3欄4等....
我需要連接所有列在一起,使得我有兩列:
ID MasterCommaDelimColumn
然後我需要將它插入到一個新表中。問題似乎是逗號。我可以將所有內容連接在一起,但是當我添加逗號時,它將它們視爲單獨的列,並且插入失敗。
編輯:
DECLARE @SQL varchar(MAX)
CREATE TABLE #AgesServedGroup(
provider_id INT, Infant VarChar(4), Preschool VarChar(4),
SchoolAge VarChar(4), Adolescent VarChar(4), YoungAdult VarChar(4),
Transition VarChar(4), Adult VarChar(4), Senior VarChar(4))
BEGIN
SET @SQL = 'INSERT INTO #AgesServedGroup (provider_id, Infant, Preschool,
SchoolAge,Adolescent,YoungAdult,Transition,Adult,Senior)
SELECT provider_id,
CASE WHEN provider_age_served_infant = 1 THEN 8 END AS Infant,
CASE WHEN provider_age_served_pre_school = 1 THEN 13 END AS Preschool,
CASE WHEN provider_age_served_school_age = 1 THEN 12 END AS SchoolAge,
CASE WHEN provider_age_served_adolescent = 1 THEN 76 END AS Adolescent,
CASE WHEN provider_age_served_young_adult = 1 THEN 77 END AS YoungAdult,
CASE WHEN provider_age_served_transition = 1 THEN 78 END AS Transition,
CASE WHEN provider_age_served_adult = 1 THEN 79 END AS Adult,
CASE WHEN provider_age_served_senior = 1 THEN 80 END AS Senior
FROM dbo.provider_age_served'
EXEC (@SQL);
END
--Combine the ages served code
CREATE TABLE #AgesServed(
provider_id int,
AgesServed VarChar(100))
BEGIN
SET @SQL = 'INSERT INTO #AgesServed (provider_id, AgesServed)
SELECT provider_id, Infant + Preschool + SchoolAge +
Adolescent + YoungAdult + Transition + Adult + Senior
FROM #AgesServedGroup'
EXEC (@SQL);
END
INSERT INTO ProviderExport (link_name, cat_id, link_featured)
SELECT provider_id,CONVERT(varchar(100),AgesServed), 0
FROM #AgesServed
DROP TABLE #AgesServedGroup
DROP TABLE #AgesServed
再次編輯
--Create the Ages Served Codes
CREATE TABLE #AgesServedGroup(
provider_id INT, Infant VarChar(4), Preschool VarChar(4), SchoolAge VarChar(4), Adolescent VarChar(4),
YoungAdult VarChar(4), Transition VarChar(4), Adult VarChar(4), Senior VarChar(4))
BEGIN
INSERT INTO #AgesServedGroup (provider_id, Infant, Preschool, SchoolAge,Adolescent,YoungAdult, Transition,Adult,Senior)
SELECT provider_id, CASE WHEN provider_age_served_infant = 1 THEN 8 END AS Infant,
CASE WHEN provider_age_served_pre_school = 1 THEN 13 END AS Preschool,
CASE WHEN provider_age_served_school_age = 1 THEN 12 END AS SchoolAge,
CASE WHEN provider_age_served_adolescent = 1 THEN 76 END AS Adolescent,
CASE WHEN provider_age_served_young_adult = 1 THEN 77 END AS YoungAdult,
CASE WHEN provider_age_served_transition = 1 THEN 78 END AS Transition,
CASE WHEN provider_age_served_adult = 1 THEN 79 END AS Adult,
CASE WHEN provider_age_served_senior = 1 THEN 80 END AS Senior
FROM dbo.provider_age_served
END
--Combine the ages served code
CREATE TABLE #AgesServed(
provider_id int, AgesServed VarChar(100))
BEGIN
INSERT INTO #AgesServed (provider_id, AgesServed) SELECT provider_id,
CASE WHEN Infant Is Not Null THEN Infant + ',' ELSE '' END +
CASE WHEN Preschool Is Not Null THEN Preschool + ',' ELSE '' END +
CASE WHEN SchoolAge Is Not Null THEN SchoolAge + ',' ELSE '' END +
CASE WHEN Adolescent Is Not Null THEN Adolescent + ',' ELSE '' END +
CASE WHEN YoungAdult Is Not Null THEN YoungAdult + ',' ELSE '' END +
CASE WHEN Transition Is Not Null THEN Transition + ',' ELSE '' END +
CASE WHEN Adult Is Not Null THEN Adult + ',' ELSE '' END +
CASE WHEN Senior Is Not Null THEN Senior ELSE '' END FROM #AgesServedGroup
END
--Add the ages served master code
BEGIN
UPDATE #AgesServed SET AgesServed = '1,' + AgesServed WHERE AgesServed <> ''
END
--Trim the trailing comma
BEGIN
UPDATE #AgesServed SET AgesServed = LEFT(AgesServed, len(AgesServed) -1) WHERE RIGHT(AgesServed,1) = ','
END
我不明白'從'。什麼是'g'? Im在ms sql中。 – 2012-02-21 01:45:02
'from(...)'語法是從子查詢中選擇的,子查詢需要有一個名稱。我用「g」作爲子查詢名稱。 Sql2008允許使用值列表作爲子查詢的等價物。所以,我從一個名爲g的虛擬表中查詢。 – jmoreno 2012-02-21 02:40:02
@jmoreno - 我想你忘了把整個東西都用引號括起來,所以它被INSERT – Leigh 2012-02-21 16:49:03