Sql 如何拆分列';在PIVOT中使用相同的标题将数据转换为不同的数据?

Sql 如何拆分列';在PIVOT中使用相同的标题将数据转换为不同的数据?,sql,sql-server-2008,dynamic,pivot,database-table,Sql,Sql Server 2008,Dynamic,Pivot,Database Table,我使用以下查询,使用PIVOT提取他们感兴趣的成员数据 CREATE Table #MEMBER_ATTRIBUTES ( MEMBER_ID int, MEMBER_PROPERTY varchar( 500 ), MEMBER_VALUE varchar( 500 ), PRMEDIAUSER_ID int, MEMBER_FULL_NAME nvarchar( 500), MEMBER_LAST_NAME nvarchar(500 ), MEMBER_MID_INIT nvar

我使用以下查询,使用PIVOT提取他们感兴趣的成员数据

CREATE Table    #MEMBER_ATTRIBUTES   (
MEMBER_ID int,
MEMBER_PROPERTY varchar( 500 ),
MEMBER_VALUE varchar( 500 ),
PRMEDIAUSER_ID int,
MEMBER_FULL_NAME nvarchar( 500),
MEMBER_LAST_NAME  nvarchar(500 ),
MEMBER_MID_INIT nvarchar( 500),
MEMBER_FIRST_NAME nvarchar( 500),
MEMBER_EMAIL nvarchar( 500),
MEMBER_FAX nvarchar( 500),
MEMBER_SEND_BY_FAX nvarchar(500 ),
MEMBER_LANGUAGE nvarchar( 500),
COUNTRY_ID int,
MEMBER_ACTIVE int,
MEMBER_DATE_ADDED datetime,
MEMBER_COMPANY  nvarchar(500 ),
MEMBER_ADDRESS nvarchar( 500),
MEMBER_CITY nvarchar( 500),
MEMBER_STATE nvarchar( 500),
MEMBER_ZIP nvarchar( 500),
MEMBER_POSTALCODE nvarchar( 500),
MEMBER_PHONE nvarchar( 500),
MEMBER_NEAREST_AIRPORT nvarchar(500 ),
MEMBER_OCCUPATION nvarchar( 500),
MEMBER_COUNTY nvarchar( 500)
)
insert INTO #MEMBER_ATTRIBUTES ( MEMBER_EMAIL,MEMBER_ID ,MEMBER_PROPERTY
, MEMBER_VALUE,PRMEDIAUSER_ID, MEMBER_FULL_NAME,MEMBER_LAST_NAME ,MEMBER_MID_INIT, MEMBER_FIRST_NAME,
MEMBER_FAX,MEMBER_SEND_BY_FAX ,MEMBER_LANGUAGE , COUNTRY_ID ,MEMBER_ACTIVE , MEMBER_DATE_ADDED ,
MEMBER_COMPANY  ,MEMBER_ADDRESS , MEMBER_CITY ,MEMBER_STATE ,MEMBER_ZIP ,MEMBER_POSTALCODE ,
MEMBER_PHONE ,MEMBER_NEAREST_AIRPORT ,MEMBER_OCCUPATION , MEMBER_COUNTY
) select distinct( m.MEMBER_EMAIL ),isnull( m.MEMBER_ID ,'0' ),
ISNULL ( [gmin].[MEMBER_PROPERTY] , '''' ) AS MEMBER_PROPERTY
, ISNULL ( [gmin]. [MEMBER_VALUE] ,'''' ) AS MEMBER_VALUE,
m.PRMEDIAUSER_ID ,m.MEMBER_FULL_NAME ,m.MEMBER_LAST_NAME ,m.MEMBER_MID_INIT ,
m.MEMBER_FIRST_NAME ,m.MEMBER_FAX ,m.MEMBER_SEND_BY_FAX ,
m.MEMBER_LANGUAGE ,m.COUNTRY_ID ,m.MEMBER_ACTIVE ,m.MEMBER_DATE_ADDED ,
m.MEMBER_COMPANY ,m.MEMBER_ADDRESS ,m.MEMBER_CITY ,m.MEMBER_STATE ,
m.MEMBER_ZIP ,m.MEMBER_POSTALCODE ,m.MEMBER_PHONE ,m.MEMBER_NEAREST_AIRPORT ,
m.MEMBER_OCCUPATION ,m.MEMBER_COUNTY
from SUBSCRIBER s
inner join V3_listserv.dbo .MEMBER m on m.MEMBER_EMAIL = s.SUBSCRIBER_EMAIL
left join V3_listserv.dbo .MEMBER_ATTRIBUTES gmin on gmin.MEMBER_ID= m.MEMBER_ID
where s .SUBSCRIBER_GROUP  ='D2013'
and m .MEMBER_ACTIVE= 1
--select * from #MEMBER_ATTRIBUTES
DECLARE @cols AS NVARCHAR( MAX ),
    @query  AS NVARCHAR ( MAX )
SELECT @cols= stuff((
    SELECT distinct ', ' +QUOTENAME ( MAX ( MEMBER_PROPERTY ))
    FROM #MEMBER_ATTRIBUTES
    group by MEMBER_VALUE
    --order by MEMBER_VALUE
    FOR XML PATH( '' )), 1 , 2, '');
SET @query = 'SELECT MEMBER_ID,PRMEDIAUSER_ID,
MEMBER_FULL_NAME,MEMBER_LAST_NAME,MEMBER_MID_INIT ,MEMBER_FIRST_NAME,
MEMBER_EMAIL,MEMBER_FAX ,MEMBER_SEND_BY_FAX,MEMBER_LANGUAGE ,COUNTRY_ID ,
MEMBER_ACTIVE,MEMBER_DATE_ADDED,MEMBER_COMPANY ,MEMBER_ADDRESS ,MEMBER_CITY,
MEMBER_STATE ,MEMBER_ZIP ,MEMBER_POSTALCODE,MEMBER_PHONE ,MEMBER_NEAREST_AIRPORT ,
MEMBER_OCCUPATION,MEMBER_COUNTY  ' + @cols + '
from
 (
 SELECT MEMBER_ID,MEMBER_VALUE,MEMBER_PROPERTY,PRMEDIAUSER_ID,MEMBER_FULL_NAME,
MEMBER_LAST_NAME,MEMBER_MID_INIT ,MEMBER_FIRST_NAME,MEMBER_EMAIL,MEMBER_FAX ,
MEMBER_SEND_BY_FAX,MEMBER_LANGUAGE ,COUNTRY_ID ,MEMBER_ACTIVE,MEMBER_DATE_ADDED,
MEMBER_COMPANY ,MEMBER_ADDRESS ,MEMBER_CITY,MEMBER_STATE ,MEMBER_ZIP ,
MEMBER_POSTALCODE,MEMBER_PHONE ,MEMBER_NEAREST_AIRPORT ,MEMBER_OCCUPATION,
MEMBER_COUNTY  FROM #MEMBER_ATTRIBUTES
 ) x
pivot
 (
   MAX(MEMBER_VALUE)
for x.MEMBER_PROPERTY in (' + @cols + ')
    ) p'
execute sp_executesql @query;
drop table #MEMBER_ATTRIBUTES
它的结果如下所示

现在您可以在“我的主要兴趣”的输出中看到“美食/烹饪、历史/当地文化”

我想要“我的主要兴趣”列的输出

可以有更多的值以“,”(逗号)分隔。我想为上面和下面的每个逗号分隔值创建一个新列

My main Intreset         My main Intreset          My main Intreset
Gastronomy/Culinary      History/local culture     Culture

我不知道如何才能做到这一点。有没有办法实现这个输出。请帮帮我,我被困在这里了。任何帮助都将不胜感激。谢谢

您好,我没有读出您的问题,但我举了一个例子来帮助您

这是我的绳子


questintitle
列名 如何在asp.net中检查网站的访问者编号?

现在,如果我想按拆分,(逗号),那么我的查询如下

select top(1)  Substring(questiontitle,1,Charindex(',', questiontitle)-1) as 
Name,Substring(questiontitle, Charindex(',', questiontitle)+1, 
LEN(questiontitle)) as Surname from QuestionMaster
这将导致

名称>>如何检查访客编号
asp.net中网站的姓氏>>?


我希望这将帮助您完成您的要求:)

您不能有两个或多个同名字段,我们可以添加1,2,3。。。。。使用列名。。。
select top(1)  Substring(questiontitle,1,Charindex(',', questiontitle)-1) as 
Name,Substring(questiontitle, Charindex(',', questiontitle)+1, 
LEN(questiontitle)) as Surname from QuestionMaster