2014-02-19 4 views
0

У меня есть SQL-запрос работает нормально, но не в состоянии произвести точный результатSQL - Фильтрация Дубликат

мой запрос Детали следующим образом:

declare @test varchar(500) 
SELECT @test=coalesce(@test+',','') + cast(RoleName as varchar) FROM                
     ( select roles.RoleName from LU_BCOMS_usersroles usrroles 
      inner join LU_BCOMS_roles roles 
      on roles.roleid  = usrroles.Roles_roleid 
      where Users_Userid='MV10310' 
     ) as Tbl 

select repfamily.ProductName as Category,repfamily.Family as SeqChange,repfamily.RepFamily as DescOfChange, req.*, 
TaskCompVer = 
CASE WHEN req.UpdateByASPM is not null THEN 'Provide PLQM Wish List' 
     WHEN req.UpdateByASPM is null THEN 'Provide ASPM Wish List' 
     WHEN req.CreatedBy is not null THEN 'Provide ASPM Wish List' 
     END 
    from performa.TX_BCOMS_Request as req 

     inner join TX_BCOMS_Requestrepfamily family on 
     family.request_requestid=req.requestid 
     inner join LU_BCOMS_RepFamily as repfamily on 
     family.RepFamily_repFamilyid=repfamily.repfamilyid   

    where req.UpdatedByPLQM is null and (

    ((CHARINDEX('ASPM',@test)> 0 and CHARINDEX('PLQM',@test)> 0) and req.UpdatedByPLQM IS null) 
    or 
    ((CHARINDEX('PLQM' ,@test)> 0) and req.UpdateByASPM IS NOT null) 
    or 
    ((CHARINDEX('ASPM',@test)> 0) and req.UpdateByASPM IS null) 
    or 
    ((CHARINDEX('PLQM' ,@test)> 0) and req.UpdateByASPM IS NOT null) 
    or 
    ((CHARINDEX('ASPM' ,@test)< 0 and CHARINDEX('PLQM',@test) < 0) and req.CreatedBy IS null) 
    ) 

Выход:

Caterogy SeqCategory DescofChange RequestId  TaskCompVer 

BIGBEAR BIGBEAR BIGBEAR  B14020002 Provide ASPM Wish List 
ARCUS3PL KOJN-RE ARCUS3PL  B14020002 Provide ASPM Wish List 
AURORA  Aurora Aurora   B14020003 Provide ASPM Wish List 

Когда RequestID и TaskCompVer одинаковы, нет необходимости показывать 2 записи, необходимо отфильтровать что-то вроде ниже.

мне нужен выход, как показано ниже:

Output : 

    Caterogy   SeqCategory  DescofChange RequestId TaskCompVer 

    BIGBEAR,ARCUS3PL BIGBEAR,KOJN-RE BIGBEAR,ARCUS3PL B14020002 Provide ASPM Wish List 
    AURORA    Aurora   Aurora   B14020003 Provide ASPM Wish List 

мне нужно отобразить реальное, как описано выше, я попытался с помощью функции STUFF не может в состоянии произвести фактический выход ...

ответ

0

мне нужен подобный запрос, где я нуждался так же ... Вот мой запрос:

SELECT 
'All Users' as QuestionOption, 
Stuff((SELECT N'; ' + email FROM users where email>=' ' FOR XML PATH(''),TYPE) 
.value('text()[1]','nvarchar(max)'),1,2,N'') as QuestionOptionValue 
UNION 
SELECT 'All Volunteers' as QuestionOption, Stuff((SELECT N'; ' + U.email FROM 
dbo.Users AS U LEFT OUTER JOIN (SELECT up.UserID, MAX(CASE WHEN ppd.PropertyName = \ 
'Volunteer' THEN up.PropertyValue ELSE '' END) AS Volunteer 
FROM 
dbo.UserProfile AS up 
INNER JOIN dbo.ProfilePropertyDefinition AS ppd ON 
up.PropertyDefinitionID = ppd.PropertyDefinitionID and ppd.PortalID = 0 Group By 
up.UserID) as upd on U.UserID = upd.UserID Where upd.Volunteer='True' FOR XML 
PATH(''),TYPE) .value('text()[1]','nvarchar(max)'),1,2,N'') as QuestionOptionValue 
UNION 
SELECT 'All Committees' as QuestionOption, Stuff((SELECT N'; ' + U.email FROM 
dbo.USERS AS U LEFT OUTER JOIN (SELECT up.UserID, MAX(CASE WHEN ppd.PropertyName = 
'Committee' THEN up.PropertyValue ELSE '' END) AS Committee FROM dbo.UserProfile AS 
up INNER JOIN dbo.ProfilePropertyDefinition AS ppd ON up.PropertyDefinitionID = 
ppd.PropertyDefinitionID and ppd.PortalID = 0 Group By up.UserID) as upd on U.UserID 
= upd.UserID Where upd.Committee >' ' FOR XML PATH(''),TYPE) .value('text() 
[1]','nvarchar(max)'),1,2,N'') as QuestionOptionValue 

Im не самый лучший в их написании, так что вы можете использовать мой в качестве примера. мой выход:

QuestionOption      QuestionOptionValue 

All Committees      [email protected]; [email protected] 
All Users       [email protected]; [email protected] 
All Volunteers      [email protected]; [email protected] 

Надеюсь, это поможет вам!

1

Может быть, это полезно для вас.

CREATE TABLE tempTable(name VARCHAR(50),subjects VARCHAR(50),phone VARCHAR(50)) 

INSERT INTO tempTable VALUES 
('siddique','CRM','123456'),('siddique','Asp.net','9874563'), 
('siddique','sql server','44451685'),('Danish','MVC','123456'), 
('Danish','sql server','9874563'),('Danish','WCF','44451685'), 
('shah g','Account','123456'),('shah g','MBA','9874563'), 
('shah g','Math','44451685') 

Ваш простой запрос выбрать все данные

SELECT * FROM tempTable 

name  subjects  phone 
siddique CRM   123456 
siddique Asp.net  9874563 
siddique sql server 44451685 
Danish  MVC   123456 
Danish  sql server 9874563 
Danish  WCF   44451685 
shah g  Account  123456 
shah g  MBA   9874563 
shah g  Math   44451685 

Использование STUFF к запятая разделите значения agaist каждого имени (GROUP BY имя)

SELECT 
name 
,STUFF((SELECT ', ' + subjects 
FROM tempTable temp2 WHERE temp2.name=temp1.name    
FOR XML PATH('')), 1, 1, '') AS subjects 

,STUFF((SELECT '; ' + phone 
FROM tempTable temp2 WHERE temp2.name=temp1.name    
FOR XML PATH('')), 1, 1, '') AS phones 

FROM tempTable temp1 
GROUP BY name 

DROP TABLE tempTable 

Выход:

name  subjects     phones 
Danish  MVC, sql server, WCF  123456; 9874563; 44451685 
shah g  Account, MBA, Math  123456; 9874563; 44451685 
siddique CRM, Asp.net, sql server 123456; 9874563; 44451685 
0

попробуйте это ,,,,

declare @test varchar(500) 
SELECT @test=coalesce(@test+',','') + cast(RoleName as varchar) FROM                
     ( select roles.RoleName from LU_BCOMS_usersroles usrroles 
      inner join LU_BCOMS_roles roles 
      on roles.roleid  = usrroles.Roles_roleid 
      where Users_Userid='MV10310' 
     ) as Tbl 

select 
     req.*, 
TaskCompVer = 
CASE WHEN req.UpdateByASPM is not null THEN 'Provide PLQM Wish List' 
     WHEN req.UpdateByASPM is null THEN 'Provide ASPM Wish List' 
     WHEN req.CreatedBy is not null THEN 'Provide ASPM Wish List' 
     END, 
     STUFF(
      ( 
       select ','+repfamily.ProductName 
       from TX_BCOMS_Requestrepfamily family    
        inner join LU_BCOMS_RepFamily as repfamily  on family.RepFamily_repFamilyid=repfamily.repfamilyid     
       where family.request_requestid=req.requestid 

       FOR XML PATH('')), 1, 1, '') as 'Category', 
     STUFF(
      ( 
       select ','+repfamily.Family 
       from TX_BCOMS_Requestrepfamily family    
        inner join LU_BCOMS_RepFamily as repfamily  on family.RepFamily_repFamilyid=repfamily.repfamilyid     
       where family.request_requestid=req.requestid 

       FOR XML PATH('')), 1, 1, '') as 'SeqChange', 
     STUFF(
      ( 
       select ','+repfamily.RepFamily 
       from TX_BCOMS_Requestrepfamily family    
        inner join LU_BCOMS_RepFamily as repfamily  on family.RepFamily_repFamilyid=repfamily.repfamilyid     
       where family.request_requestid=req.requestid 

       FOR XML PATH('')), 1, 1, '') as 'DescOfChange' , 

repfamily.ProductName as Category,repfamily.Family as SeqChange,repfamily.RepFamily as DescOfChange, 
    from performa.TX_BCOMS_Request as req   

    where req.UpdatedByPLQM is null and (

    ((CHARINDEX('ASPM',@test)> 0 and CHARINDEX('PLQM',@test)> 0) and req.UpdatedByPLQM IS null) 
    or 
    ((CHARINDEX('PLQM' ,@test)> 0) and req.UpdateByASPM IS NOT null) 
    or 
    ((CHARINDEX('ASPM',@test)> 0) and req.UpdateByASPM IS null) 
    or 
    ((CHARINDEX('PLQM' ,@test)> 0) and req.UpdateByASPM IS NOT null) 
    or 
    ((CHARINDEX('ASPM' ,@test)< 0 and CHARINDEX('PLQM',@test) < 0) and req.CreatedBy IS null) 
    ) 
Смежные вопросы