2011-10-19 4 views
0

SQL Server 2008ではかなり複雑なSQLクエリが10個ありますが、クライアントは内部ネットワークから実行できるようにしたいと考えています(非ローカルWebアプリケーション)をCrystal Reports XIで開きます。Crystal Reports XIで複雑なSQLクエリを再作成することの可能性

クライアントの内部ネットワークでは、(a)独自のデータベースへの書き込みアクセス権や、(b)仲介SQLサーバのセットアップを許可していません(つまり、ストアドプロシージャやその他のデータクリーニングを設定できません)。

SQLは( ROW_NUMBERの複数のインスタンスを含んでいる)(COL1、COL2によりパーティション)上、 COL1、COL2キューブとによってグループ|ロールアップ、および/または(複数の)旋回します。

これもできますか?私が読んだことは、これがストアドプロシージャを介してのみ実行可能であることを示していると思われます。私は独自のデータベースからデータを引き出す必要があります。続き


select sum(programID) 
    , sum([a.Asian]) as [Episodes - Asian], sum([b.Asian]) as [Eps w/ Next Svc - Asian], sum([c.Asian])/sum([b.Asian]) as [Avg Days to Next Svc - Asian] 
    , etc... (repeats for each ethnicity) 
from (
    select programID, 'a.' + ethnicity as ethnicityA, 'b.' + ethnicity as ethnicityB, 'c.' + ethnicity as ethnicityC 
     , count(*) as episodes, count(daysToNextService) as episodesWithNextService, sum(daysToNextService) as daysToNextService 
    from (
     select programID, ethnicity, datediff(dateOfDischarge, nextDateOfService) as daysToNextService from (
      select t1.userID, t1.programID, t1.ethnicity, t1.dateOfDischarge, t1.dateOfService, min(t2.dateOfService) as nextDateOfService 
      from TABLE1 as t1 left join TABLE1 as t2 
       on datediff(d, t1.dateOfService, t2.dateOfService) between 1 and 31 and t1.userID = t2.userID 
      group by t1.userID, t1.programID, t1.ethnicity, t1.dateOfDischarge, t1.dateOfService 
     ) as a 
    ) as a 
    group by programID 
) as a 
pivot (
    max(episodes) for ethnicityA in ([A.Asian],[A.Black],[A.Hispanic],[A.Native American],[A.Native Hawaiian/ Pacific Isl.],[A.White],[A.Unknown]) 
) as pA 
pivot (
    max(episodesWithNextService) for ethnicityB in ([B.Asian],[B.Black],[B.Hispanic],[B.Native American],[B.Native Hawaiian/ Pacific Isl.],[B.White],[B.Unknown]) 
) as pB 
pivot (
    max(daysToNextService) for ethnicityC in ([C.Asian],[C.Black],[C.Hispanic],[C.Native American],[C.Native Hawaiian/ Pacific Isl.],[C.White],[C.Unknown]) 
) as pC 
group by programID with rollup 

soooooooが...クエリのいずれか(例えば、直接句、半ダースの列が削除された機能に関連していない参加する)のバック取り除いたバージョンです。.. .. Crystal Reports XIに翻訳することもできますか?

ありがとうございます!

+0

内部ネットワークからのデータにアクセスできない場合、レポートはどのように実行されますか? – JNK

+0

今まで、彼らは独自のデータベースを毎週Webアプリケーションにエクスポートしてきました。 –

+0

高度なSQLテクニックは独自のデータベースに対しても機能することをどのように知っていますか?高度な技法はデータベースに重点を置く傾向があります。 – HLGEM

答えて

0

あなたがこれはあなたが望むことをそこにどんな有効なTSQL文を入れることができますadd command

を選択してレポートを作成する代わりに、テーブルまたはストアドプロシージャを選択します。共通テーブル式(CTE)とインラインビューの使用私は、OracleとSQL Serverに対してかなり複雑なステートメント(400行以上)を作成することができました。実際には実現可能ですが、 パラメータを使用する場合は sp_executesql SQLインジェクションを避ける方法を理解しなければなりません。

+0

これは単純にdbサーバーにコマンドを送信しているかどうか知っていますか?バックエンドはODBC経由でしかアクセスできず、MSSQLまたはOracleサーバーではないため、T-SQLを単独で処理することはできません。これは、Crystal Reportsサーバーで発生する必要があります。 –

+0

はいコマンドはDBサーバーに送信され、そこで実行され、レポートに戻されます。 BTWこれはTSQLとしてタグ付けして以来、このSybaseですか? –

+0

私はバックエンドに関する情報を持っていませんが、それはある種のプロプライエタリなシステムです。私はこれをTSQLとしてタグ付けしました。これは、元のクエリを(私たちのエクスポートされたバージョンのdbに対して実行して)書きました。 –

関連する問題