嘿所有我想要创建一个查询,以便我可以将每个找到的重复项组合成一个条目。
这方面的一个例子是:
Name | ID | Tag | Address |carNum
-------------------------------------------------------
Bob Barker |2054 |52377 |235 Some road |9874
Bill Gates |5630 |69471 |014 Washington Rd. |3700
Bob Barker |2054 |97011 |235 Some road |9874
Bob Barker |2054 |40019 |235 Some road |9874
Steve Jobs |8501 |73051 |100 Infinity St. |4901
John Doe |7149 |86740 |7105 Bull Rd. |9282
Bill Gates |5630 |55970 |014 Washington Rd. |3700
Tim Boons |6370 |60701 |852 Mnt. Creek Rd. |7059
在上面的示例中, Bob Barker 和 Bill gates 都在数据库中不止一次,所以我希望输出如下:
Bob Barker|2054|52377/97011/40019 |235 Some road |9874
Bill Gates|5630|69471/55970 |014 Washington Rd.|3700
Steve Jobs|8501|73051 |100 Infinity St. |4901
John Doe |7149|86740 |7105 Bull Rd. |9282
Tim Boons |6370|60701 |852 Mnt. Creek Rd.|7059
注意 Bob Barker & 比尔盖茨 将标记行(重复数据)附加到一行而不是多行。 这是因为我不想检查以前的ID并查看它是否与当前ID匹配并附加到数据。
我希望SQL查询大师会有一个查询来为我做这个!
感谢您的时间和帮助!
-------------------------------------------- -------------------------------------------------- --------------------------
问题已从ACCESS DATABASE更改为MS SQL SERVER 2012数据库
-------------------------------------------- -------------------------------------------------- --------------------------
答案 0 :(得分:2)
对标记字段使用MySQL GROUP_CONCAT
,并使用名称字段按数据分组。
Query:
SELECT Name, ID, GROUP_CONCAT(Tag SEPARATOR '/') AS Tag, Address, carNum
FROM users GROUP BY Name
答案 1 :(得分:0)
你可以这样做:
CREATE TABLE MyTable ( Name nvarchar(50)
, ID int
, Tag int
, Address nvarchar(50)
, carNum int
)
INSERT INTO MyTable VALUES
('Bob Barker', 2054, 52377, '235 Some road' , 9874)
, ('Bill Gates', 5630, 69471, '014 Washington Rd.' , 3700)
, ('Bob Barker', 2054, 97011, '235 Some road' , 9874)
, ('Bob Barker', 2054, 40019, '235 Some road' , 9874)
, ('Steve Jobs', 8501, 73051, '100 Infinity St.' , 4901)
, ('John Doe' , 7149, 86740, '7105 Bull Rd.' , 9282)
, ('Bill Gates', 5630, 55970, '014 Washington Rd.' , 3700)
, ('Tim Boons' , 6370, 60701, '852 Mnt. Creek Rd.' , 7059)
SELECT YT.Name
, ID
, LEFT(YT.SUB, LEN(YT.SUB) - 1) AS Tags
, Address
, carNum
FROM (SELECT DISTINCT
Name
, ( SELECT CAST(ST1.Tag AS nvarchar(5)) + ',' AS [text()]
FROM MyTable ST1
WHERE ST1.ID = ST2.ID
ORDER BY ST1.Name
FOR
XML PATH('')
) SUB
, ID
, Address
, carNum
FROM MyTable ST2
) YT
DROP TABLE MyTable