English 中文(简体)
Duplicates without using While or Cursor in T-SQL
原标题:
ID           Name
1            A
1            B
1            C
2            X
2            Y
3            P
3            Q
3            R

These are the columns in a table. I want to get output like

ID    Company
    1 A,B,C
    2 X, Y
    3 P,Q,R

Restriction is that I cannot use WHILE or CURSOR. Please write a query for the same.

最佳回答

This query should do it - uses FOR XML PATH which is new in SQL Server 2005 - hope you are on 2005 or higher, you didn t clearly specify.....

SELECT
    ID,
    STUFF(CAST((SELECT  , +Name FROM dbo.YourTable t2
                WHERE t2.ID = dbo.YourTable.ID
                FOR XML PATH(  ), TYPE) AS VARCHAR(MAX)), 1, 1,   ) AS  Company 
FROM 
   dbo.YourTable
GROUP BY 
   ID
问题回答

Here s a solution using the CROSS APPLY method:

select id, sub.names
from (
    select distinct id from YourTable
) a
cross apply (
    select name +  ,   as [text()]
    from YourTable b
    where b.id = a.id
    for xml path(  )
) sub(names)

For 2005 version:

CREATE TABLE dbo.TEST([Type] INTEGER, [Name] NVARCHAR(100), [Qty] INTEGER)
GO
INSERT dbo.TEST VALUES(1, N a , 5)
INSERT dbo.TEST VALUES(1, N b , 6)
INSERT dbo.TEST VALUES(2, N c , 44)
INSERT dbo.TEST VALUES(3, N d , 1)
GO

select [Type],
 [Description] = replace((select [Name] +  :  + cast([Qty] as varchar) as  data()      
from TEST where [Type] = t.[Type] for xml path(  )),    ,  , )
from dbo.TEST t
group by [Type]

go

drop table dbo.TEST

You can group on the ID to get the unique values, then get the comma separated string for each using a for xml query:

select
  a.ID,
  substring((
    select  ,   + Name
    from Test1
    where Test1.ID = a.ID
    for xml path(  )
  ), 3, 1000) as Company
from
  TheTable a
group by
  a.ID




相关问题
How to write this T-SQL WHERE condition?

I ve got two tables: TableA Col1 Col2 TableB Col3 Col4 I want to join them together: SELECT * from TableA join TableB ON (...) Now, in place of ... I need to write an expression ...

Customer and Order Sql Statement

TSQL query to select all records from Customer that has an Order and also select all records from customer that does not have an Order. The table Customer contains a primary key of CustomerID. The ...

Recommended way of querying multiple Versioned tables

Have a win 2003 box with MSSQL 2005 running on it. There is a database which is populated every morning with new/modified SalesOrder made the previous day. The database has several tables: SalesOrder, ...

update duplicate record

I have a table with the following fields Id Name IsPublic i need to write a sql query that updates IsPublic to false where name has a duplicate. Only one of the duplicates should have IsPublic = ...

Define variable to use with IN operator (T-SQL)

I have a Transact-SQL query that uses the IN operator. Something like this: select * from myTable where myColumn in (1,2,3,4) Is there a way to define a variable to hold the entire list "(1,2,3,4)"? ...

Selecting records during recursive stored procedure

I ve got a content management system that contains a hierarchical structure of categories, with sub-categories subject to different ordering options at each level. Currently, that s retrieved by a (...

热门标签