2016-11-01 4 views
0

あたりの医師あたりの成功した注目の割合:短縮クエリ:私は次のビューで働いている年間

enter image description here

それは毎年、与えられた医師によって行われ成功した注目の数を示します。

ここでは、(彼が雇用されて以来の)総注目件数から、1年に分割された注目件数の割合を示すクエリを作成します。私は基本的にすべてのために別々のテーブルを作成し

SELECT tv1.Doc_ID, Y1996, Y1997, Y1998, Y1999, Y2000, Y2001 
FROM 
(
    SELECT Doc_ID, CAST(1.00*[Successful 1996]/[Total Attentions] AS DECIMAL(10,2)) AS Y1996 
    FROM VIEW3 
) tv1, 
(
    SELECT Doc_ID, CAST(1.00*[Successful 1997]/[Total Attentions] AS DECIMAL(10,2)) AS Y1997 
    FROM VIEW3 
) tv2, 
(
    SELECT Doc_ID, CAST(1.00*[Successful 1998]/[Total Attentions] AS DECIMAL(10,2)) AS Y1998 
    FROM VIEW3 
) tv3, 
(
    SELECT Doc_ID, CAST(1.00*[Successful 1999]/[Total Attentions] AS DECIMAL(10,2)) AS Y1999 
    FROM VIEW3 
) tv4, 
(
    SELECT Doc_ID, CAST(1.00*[Successful 2000]/[Total Attentions] AS DECIMAL(10,2)) AS Y2000 
    FROM VIEW3 
) tv5, 
(
    SELECT Doc_ID, CAST(1.00*[Successful 2001]/[Total Attentions] AS DECIMAL(10,2)) AS Y2001 
    FROM VIEW3 
) tv6 
WHERE tv1.doc_id=tv2.doc_id 
AND tv1.doc_id=tv3.doc_id 
AND tv1.doc_id=tv4.doc_id 
AND tv1.doc_id=tv5.doc_id 
AND tv1.doc_id=tv6.doc_id 

:それは何らかの方法私がいることを、私は私が書いたスクリプトを好きではないやったで[成功注意の喚起1996]/[総注意の喚起]

ですそれらを結合することができますが、クエリを繰り返す必要があるという事実は、それほど素晴らしいものではありません。私はCASE ... THEN ... ELSEステートメントを使用しようとしましたが、エラーが発生します。

CASE ... THEN ...より短いクエリを書く方法はありますか?はいかどうか、どのように

+0

なぜ通常の方法でそれらを選択しないのですか? (10、2))、キャスト(1.00 * [成功した1997]/[総アテンション]を小数点(10,2)) from View3 [Doc_ID、Cast(1.00 * [Successful 1996]/[Total Attentions] '? – Prisoner

+0

あなたの質問に答えがありましたか? –

答えて

1

あなたは単にフォームを選択している場合は、選択を分割する必要はありません一緒にそれらを選択することができます。

SELECT Doc_ID, 
CAST(1.00*[Successful 1996]/[Total Attentions] AS DECIMAL(10,2)) AS Y1996, 
CAST(1.00*[Successful 1997]/[Total Attentions] AS DECIMAL(10,2)) AS Y1997, 
CAST(1.00*[Successful 1998]/[Total Attentions] AS DECIMAL(10,2)) AS Y1998, 
CAST(1.00*[Successful 1999]/[Total Attentions] AS DECIMAL(10,2)) AS Y1999, 
CAST(1.00*[Successful 2000]/[Total Attentions] AS DECIMAL(10,2)) AS Y2000, 
CAST(1.00*[Successful 2001]/[Total Attentions] AS DECIMAL(10,2)) AS Y2001 
FROM VIEW3 
0

はおそらく、私はあなたの質問で何かを逃したが、何あなたは基本的に行っていることに沸く:

Doc_Idは、主キーまたは一意索引の場合、ある
SELECT 
    doc_id, 
    Y1996=CAST(1.00*[Successful 1996]/[Total Attentions] AS DECIMAL(10,2)), 
    Y1997=CAST(1.00*[Successful 1997]/[Total Attentions] AS DECIMAL(10,2)), 
    Y1998=CAST(1.00*[Successful 1998]/[Total Attentions] AS DECIMAL(10,2)), 
    Y1999=CAST(1.00*[Successful 1999]/[Total Attentions] AS DECIMAL(10,2)), 
    Y2000=CAST(1.00*[Successful 2000]/[Total Attentions] AS DECIMAL(10,2)), 
    Y2001=CAST(1.00*[Successful 2001]/[Total Attentions] AS DECIMAL(10,2)) 
FROM 
    VIEW3 
ORDER BY 
    doc_id; 

(すなわち、各DOC_IDのみたいていあなたのソーステーブルで一度だけ発生します)。

関連する問題