2016-12-15 10 views
0

Предположим, у меня есть 3 таблицы (как показано ниже).Группа по идентичной строке без преобразования в конкатенированную строку

series_no стол:

| id | desc_seriesno | 
|:------|----------------:| 
| 7040 |  AU1011  | 
| 7041 |  AU1022  | 
| 7042 |  AU1033  | 
| 7043 |  AU1044  | 
| 7044 |  AU1055  | 
| 7045 |  AU1066  | 

бренда стол:

| id | desc_brand  | 
|:------|----------------:| 
| 1020 |  Audi  | 
| 1021 |  Bentley  | 
| 1022 |  Ford  | 
| 1023 |  BMW   | 
| 1024 |  Mazda  | 
| 1025 |  Toyota  | 

car_info стол:

| seriesno_id | brand_id | color | 
|:---------------|------------|--------:| 
|  7040  | 1020 | white | 
|  7040  | 1020 | black | 
|  7040  | 1020 | pink | 
|  7041  | 1021 | yellow | 
|  7041  | 1021 | brown | 
|  7042  | 1022 | purple | 
|  7042  | 1022 | black | 
|  7042  | 1022 | green | 
|  7043  | 1023 | blue | 
|  7044  | 1024 | red  | 
|  7045  | 1025 | maroon | 
|  7045  | 1025 | white |  

Как с i-группу или объединить аналогичную/идентичную строку, не меняя их в конкатенированной строке, а вместо этого просто перезаписывайте одну и ту же строку.

это мой текущий запрос с SQL сервером 2014: -

SELECT SN.id AS seriesid, B.id AS brandid, B.desc_brand 
FROM [db1].[dbo].[series_no] SN 
    LEFT JOIN [db1].[dbo].[car_info] CI 
    ON CI.seriesno_id = SN.id 
    RIGHT JOIN [db1].[dbo].[brand] B 
    ON B.id = CI.brand_id 
GROUP BY SN.id, B.id, B.desc_brand 
ORDER BY SN.id ASC 

, но, к сожалению, он дал мне ошибку, так как я не могу группировать по аналогичной строке таким образом.

я хочу, чтобы это было так: -

| seriesid | brandid | desc_brand | 
|:-----------|------------|--------------:| 
| 7040 | 1020 |  Audi  | 
| 7041 | 1021 |  Bentley | 
| 7042 | 1022 |  Ford  | 
| 7043 | 1023 |  BMW  | 
| 7044 | 1024 |  Mazda  | 
| 7045 | 1025 |  Toyota | 

вместо этого (сцепленной строки): -

| seriesid | brandid |  desc_brand  | 
|:-----------|------------|----------------------:| 
| 7040 | 1020 |  Audi, Audi, Audi | 
| 7041 | 1021 |  Bentley, Bentley | 
| 7042 | 1022 |  Ford, Ford, Ford | 
| 7043 | 1023 |  BMW    | 
| 7044 | 1024 |  Mazda    | 
| 7045 | 1025 |  Toyota, Toyota | 
+0

Вам это необходимо, как конкатенировано? – Wanderer

+0

Нет. Я бы предпочел не иметь его как конкатенированную строку, потому что desc_brand в основном поддерживает одну и ту же строку. Можно ли это сделать? (без преобразования в конкатенированную строку) – user3657273

ответ

0

Просто Вам нужно избежать дубликатов так что используйте один из следующие два подхода:

Группа по

select col1, col2 .. 
from table1 a inner join table2 b 
on .. 
group by col1, col2 .. 

Distinct

select distinct col1, col2 .. 
    from table1 a inner join table2 b 
    on .. 

Demo: -

Create database TestDB 
go 
use TestDB 
go 
Create table series_no (id int ,desc_seriesno varchar(20)) 
go 
insert into series_no values (7040, 'AU1011'), 
         (7041, 'AU1022'), 
         (7042, 'AU1033'), 
         (7043, 'AU1044'), 
         (7044, 'AU1055'), 
         (7045, 'AU1066') 
go 
Create table brand (id int ,desc_brand varchar(20)) 
go 
insert into brand values (1020, 'Audi'), 
         (1021, 'Bentley'), 
         (1022, 'Ford'), 
         (1023, 'BMW'), 
         (1024, 'Mazda'), 
         (1025, 'Toyota') 

Create table car_info (seriesno_id int ,brand_id varchar(20), color varchar (20)) 
go 
insert into car_info values(7040,1020,'white'), 
(7040,1020,'black'), 
(7040,1020,'pink'), 
(7041,1021,'yellow'), 
(7041,1021,'brown'), 
(7042,1022,'purple'), 
(7042,1022,'black'), 
(7042,1022,'green'), 
(7043,1023,'blue'), 
(7044,1024,'red'), 
(7045,1025,'maroon'), 
(7045,1025,'white') 
go 

select a.seriesno_id as seriesnoid, a.brand_id as brandid,b.desc_brand 
from car_info a inner join brand b 
on brand_id = id 
group by a.seriesno_id , a.brand_id ,b.desc_brand 

/* 
-- Or 
select distinct a.seriesno_id as seriesnoid, a.brand_id as brandid,b.desc_brand 
from car_info a inner join brand b 
on brand_id = id 
*/ 

Результат: -

enter image description here

+0

это woks! Если я запустил этот код так, как он есть, он даст мне эту ошибку. «Типы данных текста, ntext и изображений нельзя сравнивать или сортировать, за исключением случаев использования оператора IS NULL или LIKE», поскольку мой desc_brand объявлен как ntext. Итак, я изменил свой запрос в соответствии с этим решением здесь [ссылка] (http://stackoverflow.com/questions/14979413/the-text-ntext-and-image-data-types-cannot-be-compared-or-sorted -except-whe) вместо изменения типа var в базе данных. – user3657273

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^