1つの結果に複数の結果、アプリケーションの制限

sql sql-server tsql
1つの結果に複数の結果、アプリケーションの制限

私はCase Awareと呼ばれる合法的なソフトウェアを使用しています。 制限付きのSQL検索を行うことができ、Case Awareがデータベースから特定の値を取得できるようになりました。 私の問題は、複数の値を返すSQL検索を作成する必要があることですが、Case Awareソフトウェアは1つの結果のみを回答として受け入れます。 クエリがリストを生成する場合、トップ値のみが認識されます。 これは、回避できないソフトウェアの制限です。

私の非常に基本的な検索は次のとおりです。

select rate
From case_fin_info
where fin_info_id = 7 and rate!=0

これにより、3〜15のレートのリストが生成されます。これは、データベースから検索を直接実行した場合に行われます。 ただし、Case Awareを実行すると、表の最初のレートのみがプルされます。 Case Awareでは、結果をテンプレートに自動的に挿入できるため、Case Awareを介して値を取得する必要があります。 (私が作業している場所では、1日に数千ではないにしても数百が生成されるため、手動で行うのはB $ @#%です!)

検索からすべての値を1つの値にプルする方法を見つける必要があります。 XMLを使用できず(Case Awareでエラーが発生します)、一時テーブルを作成できません。 (再び、大文字と小文字を区別する制限)可能であれば、各値の間に手動のリターンを挿入して、この情報を取り込むドキュメント内で値が分離されるようにする必要があります。

Case Awareにはユーザーマニュアルがなく、サポートにお金を払っています(私たちにはあります)が、その能力には疑問があります。 過去に不可能だと言われたクエリを簡単に作成することができました。 私はこれがそれらの時代の一つであることを望んでいます。

  • IntegrationGirly *

Addtl FYI:

私は現在、この手品を持っています:nullであってもデータベースから各値を個別に引き出し、ドキュメント内のテーブルに各値を入れます。 (30個の個別の検索)「動作」しますが、ドキュメントの生成に非常に時間がかかり、大量の空きスペースも残されます。 いくつかのケースには3つの値があり、ほとんどが5〜10ですが、ブルームーンに必要なため、最大30のレートエリアがあります。 これにより、テンプレートはひどくジャンキーに見えますが、ドキュメントを生成する弁護士には影響しませんが、ドキュメントが表示されないため、テーブルを生成するたびにすべての空の列を取り出す必要があります。 私たちが毎日行うドキュメントの数では、1)これは時間がかかり、2)弁護士とパラリーガルがテーブルから行を単語で取り出す方法を知っていることを前提としています。

  1  0


ベストアンサー

アプリケーションに実装する同様のクエリがありました。 これはうまくいくはずです。

DECLARE @Rate VARCHAR(8000)
SELECT @Rate = COALESCE(@Rate + ', ', '') + rate
From case_fin_info where fin_info_id = 7    and rate!=0;

1


まず、このようなひどいソフトウェアで作業しなければならなかったことに対する私の哀dolの意。

次に、考えられる解決策があります(これはSQL Serverを想定しています)。

1)「SELECT COUNT(*)FROM case_fin_info WHERE fin_info_id = 7 AND rate <> 0」を実行します。 結果(行数)をクライアントアプリケーションに保存します。

2)クライアントアプリで、 `for(i = 0; i <count; i ++)`ループを実行します。 各反復中に、クエリを実行します

WITH OrderedRates AS
(
   SELECT Rate, ROW_NUMBER() OVER (ORDER BY  ASC) AS 'RowNum'
   FROM case_fin_info WHERE fin_info_id = 7 AND rate <> 0
)
SELECT Rate FROM OrderedRates WHERE RowNum =

必要に応じて<>の内容を置き換えます。 基本的に、クライアントアプリで行数を取得してから、一度に1行を取得します。 地獄ほど効率的ではありませんが、15行しかなければ、それほど悪くないはずです。

1


単一の列に1つの結果を返す単一のクエリを次に示します。 手動復帰がCR + LFであると想定しています。 また、15個すべてのレートを処理するには、拡張する必要があります。

SELECT max(Rate1) + CHAR(13) + CHAR(10)
    + max(Rate2) + CHAR(13) + CHAR(10)
    + max(Rate3) + CHAR(13) + CHAR(10)
    + max(Rate4) + CHAR(13) + CHAR(10)
    + max(Rate5) + CHAR(13) + CHAR(10)
FROM (
    SELECT CASE RateID WHEN 1 THEN CAST(rate as varchar) END AS Rate1,
        CASE RateID WHEN 2 THEN CAST(rate as varchar) END AS Rate2,
        CASE RateID WHEN 3 THEN CAST(rate as varchar) END AS Rate3,
        CASE RateID WHEN 4 THEN CAST(rate as varchar) END AS Rate4,
        CASE RateID WHEN 5 THEN CAST(rate as varchar) END AS Rate5
    FROM
        (
        select RateID, rate From case_fin_info where fin_info_id = 7 and rate!=0
        ) as r
    ) as Rates

0


タイトルとURLをコピーしました