0

私は2つのテーブルを持っています...それらは2つの異なる名前を処理するため、そのうちの1つの列名を除いて基本的に同じですが、必要なデータは同じ名前の列にあります。私がやりたいことのほとんどは...重複を数えないように区別する必要があることです...別々のテーブルとして取得できます...しかし、それらをまとめることはできません..必要ですC3コードページへの送信方法と読み取り方法により、1列に表示されます...構造はすでに設定されています。このような1つのストアドプロシージャで実行されている他のステートメントは約5つあります。 (また、これを設定したのは私ではありませんでした)。ですから、これが可能であれば、教えてください。実際のコードを見たい場合は、私が持っている正確なコードも貼り付けます。理解しやすいように単純化しようとしました。私'

画像1は現在設定されているものです。

http://imgur.com/h0rNU

上部はテーブルに格納されているものです。下部は基本的にこのコードを実行して下部を取得する結果です。

DECLARE @id INT;
DECLARE @invest nvarchar(50);
SET @id = '7633';
SET @invest = '';

SELECT 'a' + CONVERT(nvarchar, orderfindings.risk_rating) AS cat, COUNT(DISTINCT orderfindings.prnt_id) AS stat
    FROM orderheader, orderaudits, orderfindings
    WHERE orderheader.id = orderaudits.orderheader_id AND orderaudits.ID = orderfindings.prnt_id
    AND orderheader.id = @id AND orderfindings.risk_rating > 0 AND orderaudits.Investor_Name LIKE '%' + @invest + '%'
    GROUP BY orderfindings.risk_rating

調査結果の代わりにエージェンシーが必要な場合..単にそれを置き換えます..エージェンシーと調査結果は2つのテーブルです..それらは列に関してはほとんど同じです...しかし私は結果を一緒にしたいと思います..私はいくつかの方法を試しました..しかし、私はそれをイメージすることができないようです2-一番下のテーブルは私が探しているものです..それはそれらを両方とも1に結合します:

http://imgur.com/a4qXW

注文に調査結果または代理店、あるいはその両方が含まれている場合は、そのリスク評価に対して1としてマークされます...そうでない場合は、そのリスク評価に対して0としてマークされます。私が得たものを見てください..どんな助けもありがたいです..あなたが理解していない場合、私は私ができることを明確にします。

編集:
私はそれを使って作業してきました...これはhttp://pastebin.com/117Z2TVhでした..2列を表示するようになりました..それでも正しい結果ではありません...私はa1=1を取得しています。 ..a2 = 1 ...したがって、すべての注文を実行しているわけではありません...またはそれをカウントする方法が必要です...ケースステートメントの先頭に合計を入れます..カウントのためにエラー...だから私はカウントを取りました...実際には機能しませんでした..何かアドバイスはありますか?

4

2 に答える 2

1

UNION 句を使用してみましたか?

よく知らない場合: http://msdn.microsoft.com/en-us/library/ms180026.aspx

基本的に、UNION の両側で問題の 2 つの列の 1 つを返す 2 つのクエリを記述し、最終的な結果セットの 1 つの列として返されます。列名がどちらの側でも同じエイリアスでない場合は、それらを最終的な結合結果セットに結合できるようにします。

于 2012-04-12T19:37:53.953 に答える
0

;WITH Finding AS (select oa.id, oa.Risk_Rating, COUNT (orf.Prnt_ID) findcount FROM orderaudits oa LEFT JOIN orderfindings orf on oa.ID = orf.Prnt_ID --WHERE oa.risk_rating > 0 and oa.Investor_Name like ' %' + @invest + '%' GROUP BY oa.id, oa.Risk_Rating), Agency AS (select oa.id, oa.Risk_Rating, COUNT (ora.Prnt_ID) Agencycount FROM orderaudits oa LEFT JOIN orderagencies ora on oa.ID = ora.Prnt_ID --WHERE oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.id, oa.Risk_Rating) /* SELECT 'Finding Only', oa.Risk_Rating, COUNT (oa.id) as a, SUM(CASE WHEN f.findingcount >0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN find f ON oa.id = f.id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

ユニオンオール

SELECT 'Agency Only', oa.Risk_Rating, COUNT(oa.id) as a, SUM(CASE WHEN a.agencycount > 0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN Agency a ON oa.id = a. id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

UNION ALL */ --Together SELECT 'aa' + convert(nvarchar, oa.risk_rating) as cat, SUM(CASE WHEN f.findingcount > 0 OR a.agencycount > 0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN find f ON oa.id = f.id LEFT JOIN Agency a ON oa.id = a.id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa .Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

于 2012-04-16T16:15:24.747 に答える