3

質問が正確かどうかはわかりませんが、言い方が思い浮かびませんでした。例を使って説明しようと思います。

訪問 ID (VID)、患者 ID (PID)、および病院 ID (HID) の属性を持つ個々の病院訪問のテーブルを考えてみましょう。

 VID  PID  HID
  1    A    x
  2    A    y
  3    A    x
  4    B    z
  5    B    z

私が探しているのは、その PID の合計 VID の 50% 以上が指定された HID にある PID-HID ペアを特定することです。この場合、PID「A」の合計 VID の 2/3 が HID「x」にあり、「B」のすべての VID が「B & Z」にあるため、「A & x」を返すようにします。 「ズ」

4

3 に答える 3

2

これは厄介かもしれませんが、私はそれが仕事をしていると思います。テーブルに名前が付けられていることを前提としていますvisits

;with infoCte as (
select pid, hid, count(*) as visitcount
from visits
group by pid, hid
) 

select * 
from infocte i
where visitcount > (
    select count(*) / 2 as midcount
        from visits v
        where v.pid = i.pid
) 

最初の部分は、患者と病院ごとのすべての訪問回数を取得します。2 番目の部分は、その特定の病院を 50% 以上の時間訪問した人のみに結果を制限します。正確に 50% 以上が必要な場合は、 を に変更し>ます>=

于 2013-09-30T21:35:53.427 に答える
0

SQL 2012 で動作します。

これがSqlFiddleのデモです。

with cte
as
(
select *, COUNT(PID) OVER(PARTITION BY PID, HID ORDER BY HID)*100.00/COUNT(PID) OVER(PARTITION BY PID ORDER BY PID) cnt
from visits
)

select *
from cte 
where cnt > 50
于 2013-09-30T21:51:06.740 に答える