私は何を要求しているのかについてはっきりしていませんが、レポートのクエリを作成しようとしています。作成する各列の自分の値はすべて現在1つの列にあります。現在のクエリは次のとおりです。別の列の値から新しい列を作成しているクエリを高速化するにはどうすればよいですか?
SELECT [SubjectID]
,(SELECT [DataValue]
FROM [SummarySubjectDataValueAll]
WHERE [LibraryEventID] IN (
SELECT [LibraryEventID]
FROM [LibraryEvent]
WHERE [Name] LIKE '%First Name%')
) as FirstName
,(SELECT [DataValue]
FROM [SummarySubjectDataValueAll]
WHERE [LibraryEventID] IN
(SELECT [LibraryEventID]
FROM [LibraryEvent]
WHERE [Name] LIKE '%Last Name%')) as LastName
,(SELECT [DataValue]
FROM [SummarySubjectDataValueAll]
WHERE [LibraryEventID] IN (
SELECT [LibraryEventID]
FROM [LibraryEvent]
WHERE [Name] LIKE 'Primary Phone')) as Phone
,(SELECT [DataValue]
FROM [SummarySubjectDataValueAll]
WHERE [LibraryEventID] IN (
SELECT [LibraryEventID]
FROM LibraryEvent]
WHERE [Name] = 'Secondary Phone')) as Phone2
,(SELECT [DataValue]
FROM [SummarySubjectDataValueAll]
WHERE [LibraryEventID] IN (
SELECT [LibraryEventID]
FROM [LibraryEvent]
WHERE [Name] = 'Next of Kin Phone')) as KinPhone
FROM [SummarySubjectDataValueAll]
WHERE DataValue = @Phone
(個別に、私は必要なものを非常に迅速に取得します)それは情報を引き抜こうとするのに10分以上続いています。同じテーブルを6回再実行するためです。もっと効率的なやり方でこれをやり直す方法を思い出すことができません。誰かが助けてくれますか?このレポートの背景に関するいくつかの背景:本質的に逆の電話帳です。私は上記の3つのタイプ(プライマリ、セカンダリ、または隣人のいずれか)のいずれかである可能性のある自分の電話番号に基づいて人の情報を引き出す必要があります。
はあなたが単にCASE EXPRESSION
条件付き集約を使用して、すべてこのネストされた選択を回避することができ、事前
あなたが実行計画をしてください提供することはできますか? –
SQLバージョン?私には非常に単純なピボットのようだ。 –
この既存のクエリはおそらくあなたの考えをしません。これは、SummarySubjectDataValueAllテーブルの行にあるものと一致するものではなく、各フィールド名のLibraryEventの_first_エントリを返します。 –