2015-11-19 69 views
-1

嘿,我想创建一个查询,以便我可以将每个找到的重复项组合成一个条目。MS SQL 2012查询结合每个重复的找到的条目

这样的一个例子是:

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|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 

注意如何鲍勃巴克 & 比尔·盖茨将标记行(复制的数据)附加到一行中,而不是具有多行。 这是因为我不想检查以前的ID并查看它是否与当前ID匹配并追加到数据中。

我希望SQL查询大师会有一个查询来为我做这个!

感谢您的时间和帮助!

--------------------------------------------- -------------------------------------------------- -------------------------

问题已经从ACCESS数据库中更改到MS SQL SERVER 2012数据库

- -------------------------------------------------- -------------------------------------------------- -------------------

+1

您正在寻找一个聚合字符串连接函数。 MS Access没有一个。下面是编写这样一个函数的一种方法:http://stackoverflow.com/questions/5174362/microsoft-access-condense-multiple-lines-in-a-table/5174843#5174843。 –

+0

distinct关键字不可用?从表名 –

+0

中选择不同的col1,col2 ...我现在要使用MS SQL Server 2012进行查询,因为它具有比Access更多的功能。 – StealthRT

回答

0

你可以像这样做s:

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 
2

对标记字段使用MySQL GROUP_CONCAT,对名称字段使用数据分组。

Query: 
SELECT Name, ID, GROUP_CONCAT(Tag SEPARATOR '/') AS Tag, Address, carNum 
FROM users GROUP BY Name 
+0

此查询是否在Access 2010中工作? – StealthRT

+0

请检查我的OP更新。 – StealthRT