0

結果の各レコードの子レコードの数を返したいですか?

lists
listid,name
----------------
1,foods
2,fruits
3,veggies
4,counties
5,blah /* other list types */


listitems
listid,listitemId,listname
----------------
1,1,fruits
2,1,veggies
3,3,carrots
4,3,broccoli

これが私が処理しなければならないクエリです:

declar @listid int
select @listid = 1 --as an example
select * from listitems where listid=@listid

results:
1,1,fruits
2,1,veggies

目標:この例では、果物と野菜に存在するアイテムの数を表示したいと思います。

listitems
listitemid,listid,name,childcount
1,1,fruits,0
2,1,veggies,2

これが私が答えを思いついた方法です:

select *,
(
    select (select case when COUNT(*)>0 then 1 else 0 end as reccount 
    from ListItems li3 where li3.listid = l.listid) 
    from Lists l where li2.name = l.listname
) as haschildrecords
 from ListItems li2 where listid=1

カウントとビットのどちらを返すかはまだ決定中です...

これは正しいですか、それとも最善の方法ですか?

4

2 に答える 2

1

これはあなたが求めているものですか?

select
  lists.listid,
  lists.name, 
  count(distinct listitemid) as itemcount, 
  convert(bit,sign(count(distinct listitemid) ) ) as itemexists    
from
  lists 
     left join
  listitems on lists.listid = listitems. listid
group by 
  lists.listid,lists.name

わかりませんが、階層構造を構築している場合は、、common table expressionsおよび/またはを確認する必要がありますHierarchyID

于 2012-08-10T19:48:45.893 に答える
0
select *,
(
    select (select case when COUNT(*)>0 then 1 else 0 end as reccount 
    from ListItems li3 where li3.listid = l.listid) 
    from Lists l where li2.name = l.listname
) as haschildrecords
 from ListItems li2 where listid=1
于 2012-08-16T18:14:11.130 に答える