Возвращаемое количество сгруппировано по категории с элементом, содержащим эту категорию - PullRequest
0 голосов
/ 21 марта 2012

У меня есть переменная таблицы, которая содержит записи, такие как:

locationID locationIDsub codetype code       codeTitle
---------- ------------- -------- ---------- ---------------
24         15            08       000000     Scooters
51         15            08       000000     Scooters
51         15            08       110000     Trucks
24         15            08       110000     Trucks
51         15            08       111011     Semis
24         15            08       111011     Semis
24         15            08       119061     Dump Trucks
24         15            08       119071     Garbage Trucks
51         15            08       254011     Cars

То, что я хочу, это:

occcode    occtitle               count locationID
---------- ---------------------- ----- ---------
000000     Scooters               2     24,51
110000     Trucks                 2     24,51
111011     Semis                  2     24,51
119061     Dump Trucks            1     24
119071     Garbage Trucks         1     24
254011     Cars                   1     51

Я могу получить счет просто отлично, просто не могучтобы получить количество + список идентификаторов местоположения, используя следующее:

SELECT Res.code,Res.codetitle,count(Res.codetitle)
FROM @resultsTable As Res
JOIN [dbo].[mv_VEHCODE_Union] As Veh
    ON Res.code= Veh.code AND Res.codetype = Veh.vehcodetype
GROUP BY Res.code,Res.codetitle
ORDER BY code

Вот окончательная версия (все еще в процессе настройки), которую я использую, основываясь на ответе Дениса (я сбросил счетстолбец, поскольку используется только для отладки):

select distinct 
    v.code, 
    v.codetype, 
    locations = stuff((
         select distinct ',' + cast(locationid as varchar) 
         from @resultsTable v2 
         where v2.code=v.code and v2.codetype = v.codetype 
         for xml path('')
    ),1,1,'') 
    from @resultsTable v
    order by v.code

1 Ответ

1 голос
/ 21 марта 2012

Вот, пожалуйста,

select distinct 
v.code, 
v.codetype, 
cnt = (
     select count(*) 
     from mv_VEHCODE_Union v2 
     where v2.code=v.code and v2.codetype = v.codetype
), 
locations = stuff((
     select distinct ',' + cast(locationid as varchar) 
     from mv_VEHCODE_Union v2 
     where v2.code=v.code and v2.codetype = v.codetype 
     for xml path('')
),1,1,'') 
from mv_VEHCODE_Union v
order by v.code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...