2013-10-05 3 views

ответ

2

Вы ищете запрос кросс-таблицы. См. http://www.mssqltips.com/sqlservertip/1019/crosstab-queries-using-pivot-in-sql-server/ для учебника.

+1

если я скажу правильно, кросс-код запроса о суммах строк, но здесь у меня есть строки. –

+0

Я пропустил это, и поэтому мой ответ неверен. SQL просто не будет делать то, что вы хотите. Вы должны написать хранимую процедуру. – Tarik

1

Принимая предположения, что каждый владелец для каждой группы будет иметь 3 строки,

Если это не так, то я должен написать SP (не могу сделать прямо сейчас поможет вам в дальнейшем)

select [owner], [group], 
    parsename(Model,3) as Model1 
    ,parsename(Model,2) as Model1 
    ,parsename(Model,1) as Model1 
from 
(
select [owner], [group], 
STUFF((
    select '.' + model 
    from Table1 t2 where 
    t2.[owner]=t1.[owner] 
    and t2.[group]=t1.[group] 
    for xml path('')),1,1,'') Model 
from Table1 t1 
group by [owner],[group] 
)t 

SQl Fiddle

Обновление (По запросу OP)

select [owner] 
    ,case len(model)-len(replace(model,'.','')) 
     when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),3) 
     when 2 then parsename(Model,3) 
     when 1 then parsename(Model,2) 
     else Model 
    end as Model1 
    ,case len(model)-len(replace(model,'.','')) 
     when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),2) 
     when 2 then parsename(Model,2) 
     when 1 then parsename(Model,1) 
     else '' 
    end as Model2 
    ,case len(model)-len(replace(model,'.','')) 
     when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),1) 
     when 2 then parsename(Model,1) 
     else '' 
    end as Model3 
    ,case len(model)-len(replace(model,'.','')) 
     when 3 then reverse(substring(reverse(model),1,charindex('.',model,1))) 
     else '' 
    end as Model4 
from 
(
select [owner], 
    STUFF((
    select '.' + model 
    from Table1 t2 where 
    t2.[owner]=t1.[owner] 
    for xml path('')),1,1,'') Model 
from Table1 t1 
group by [owner] 
)t 

SQl Fiddle

+0

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

+0

Можете привести несколько примеров. Возможно, мне придется создать SP для него. – Luv

+0

Я изменил свой стол, пожалуйста, проверьте еще раз. –

0

Что вы представляете в виде таблицы результатов не таблица вообще. Это тоже не кросс-таблица, хотя она немного похожа. То, что вы действительно ищете, представляет собой агрегатную функцию, которая объединяет строки, но, к сожалению, не существует. Единственным решением было бы создать пользовательский, используя T-SQL. Но это не для слабонервных.

+0

это довольно легко. Просто посмотри на моего собеседника. – Luv

+0

Молодцы. Теперь дайте нам решение для владельца со 100 различными моделями. –

+0

Мне просто нужна ** [пользовательская функция разделения] (http://stackoverflow.com/questions/2647/split-string-in-sql) ** – Luv

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