0

以下のクエリにカウント関数を追加する方法を知りたいだけです。このクエリでは、p_id のカウントが 1 に等しいレコードを表示するだけで済みます。

select Distinct p_id,i.img_path as ImagesName, 
(
  select p.project_details from [Project] p where p.p_id=i.p_id
) as ProjectName
from [p_Image] i
4

3 に答える 3

0

してみてください:

SELECT 
    * 
FROM(
    select 
        p_id, 
        i.img_path as ImagesName, 
        (
          select p.project_details from [Project] p where p.p_id=i.p_id
        ) as ProjectName,
        COUNT(*) OVER (PARTITION BY p_id) CNT
    from [p_Image] i
)x WHERE CNT=1
于 2013-09-07T06:56:04.360 に答える
0

これを試して:

select p_id, i.img_path as ImagesName, p.project_details as ProjectName, count(*) as sum
from [p_Image] i
join [Project] p on (p.p_id=i.p_id)
group by p_id
having sum = 1;
于 2013-09-07T06:56:42.230 に答える
0

クエリは次と同等です。

select p_id, i.img_path as ImagesName, p.project_details as ProjectName
from p_Image i left outer join
     project p
     on p.p_id=i.p_id;

「一意の」p_id を取得するには、次の 2 つの方法があります。

select p_id, min(i.img_path) as ImagesName, min(p.project_details) as ProjectName
from p_Image i left outer join
     project p
     on p.p_id = i.p_id
group by p_id
having count(*) = 1;

ロジック: カウントが 1 の場合、 と の値は 1つmin()だけです。はその値を返します。img_pathproject_detailsmin()

次の例では、代わりにウィンドウ関数を使用したサブクエリを使用しています。

select p_id, ImagesName, ProjectName
from (select p_id, i.img_path as ImagesName, p.project_details as ProjectName,
             count(*) over (partition by p_id) as cnt
      from p_Image i left outer join
           project p
           on p.p_id=i.p_id
     ) pi
where cnt = 1;
于 2013-09-07T13:43:50.553 に答える