如何在SQL 2012中使用来自不同列的值连接名称
问题描述:
我想根据ID将值连接成一列。如何在SQL 2012中使用来自不同列的值连接名称
有没有办法用SQL语句连接基于另一列的两列?
我的表看起来像这样
customerID Name Values
1 John 10apples
1 John 20oranges
1 John 30bananas
2 Steve 15apples
2 Steve 20oranges
2 Steve 35bananas
我希望查询应该给我一些这样的事
customerID Name Values FAKENAME
1 John 10apples 10apples_20oranges_30bananas
1 John 20oranges
1 John 30bananas
2 Steve 15apples 15apples_20oranges_35bananas
2 Steve 20oranges
2 Steve 35bananas
基本上是不同的IDS应该结合值创建法米克名
答
你可以使用这个。
DECLARE @Table TABLE (CustomerID INT, Name VARCHAR(20), [Values] VARCHAR(20))
INSERT INTO @Table
VALUES
(1 ,'John','10apples'),
(1 ,'John','20oranges'),
(1 ,'John','30bananas'),
(2 ,'Steve','15apples'),
(2 ,'Steve','20oranges'),
(2 ,'steve','35bananas')
;WITH CTE
AS (
SELECT DISTINCT
CustomerID,
Name,
[Values],
STUFF(
(
SELECT '_'+[Values]
FROM @Table T2
WHERE T1.CustomerID = T2.CustomerID FOR XML PATH('')
), 1, 1, '') FakeName
FROM @Table T1)
SELECT CustomerID,
Name,
[Values],
CASE
WHEN(ROW_NUMBER() OVER(PARTITION BY FakeName ORDER BY FakeName)) > 1
THEN ''
ELSE FakeName
END FakeName
FROM CTE;
结果:
customerID Name Values FAKENAME
1 John 10apples 10apples_20oranges_30bananas
1 John 20oranges
1 John 30bananas
2 Steve 15apples 15apples_20oranges_35bananas
2 Steve 20oranges
2 Steve 35bananas
+0
更新了我的答案。 –
答
试试这个:?SQL Server的动态PIVOT查询]
;WITH cte0 AS(
SELECT 1 AS CustomerID, 'John' AS [Name],'10apples' AS [Values] UNION
SELECT 1 , 'John' ,'20oranges' UNION
SELECT 1 , 'John' ,'30bananas' UNION
SELECT 2 , 'Steve' ,'15strawberries' UNION
SELECT 2 , 'Steve' ,'25blueberries' UNION
SELECT 2 , 'steve' ,'35blackberries')
,cte1 as(
SELECT customerid,[name],
STUFF((SELECT '_'+ [values]
FROM cte0 t1
WHERE t1.customerid = t2.customerid
FOR XML PATH ('')), 1, 1, '') AS FakeName
FROM cte0 t2
GROUP BY customerid,[name]),
cte2 AS(
SELECT a.CustomerID,a.name,[values],fakename,Row_Number() OVER(PARTITION BY a.CustomerID ORDER BY a.CustomerID) AS RN
FROM cte0 a
INNER JOIN cte1 b
ON a.CustomerID = b.customerid)
SELECT CustomerID,[name],[values],CASE WHEN rn = 1 THEN FakeName ELSE '' END AS FakeName
FROM cte2
的可能的复制(https://stackoverflow.com/questions/10404348/sql -server-dynamic-pivot-query) –
[如何使用GROUP BY连接SQL Server中的字符串?](https://stackoverflow.com/questions/273238/how-to-use-group-by- to-concatenate-strings-in-sql-server) –