0

2つの異なるリクエストから情報を取得してそれらを比較し、3行目の比較に基づいてYES、NO、NAを表示するユニオンクエリがあります。

以下は私のSQLクエリです

SELECT CAST(RR.reqestno AS VARCHAR(MAX)) reqestno,
CAST(RR.receiveddate AS VARCHAR(MAX)) AS receiveddate,
CAST(RR.rptcomments AS VARCHAR(MAX)) AS rptcomments,
CAST(RR.reportfrequency AS VARCHAR(MAX)) AS reportfrequency,
CAST(RR.schedule AS VARCHAR(MAX)) AS schedule,
CAST(RR.schedulebasedon AS VARCHAR(MAX)) AS schedulebasedon,
CAST(RR.clmsrvdtfrom AS VARCHAR(MAX)) AS clmsrvdtfrom,
CAST(RR.clmsrvdtthru AS VARCHAR(MAX)) AS clmsrvdtthru,
CAST(RR.clmpddtfrom AS VARCHAR(MAX)) AS clmpddtfrom,
CAST(RR.clmpddtthru AS VARCHAR(MAX)) AS clmpddtthru,
CAST(RR.customer AS VARCHAR(MAX)) AS customer
from REPORT_REQUEST RR 
where RR.reqestno = xxxxxx
UNION ALL
SELECT CAST(RR.reqestno AS VARCHAR(MAX)) reqestno,
CAST(RR.receiveddate AS VARCHAR(MAX)) AS receiveddate,
CAST(RR.rptcomments AS VARCHAR(MAX)) AS rptcomments,
CAST(RR.reportfrequency AS VARCHAR(MAX)) AS reportfrequency,
CAST(RR.schedule AS VARCHAR(MAX)) AS schedule,
CAST(RR.schedulebasedon AS VARCHAR(MAX)) AS schedulebasedon,
CAST(RR.clmsrvdtfrom AS VARCHAR(MAX)) AS clmsrvdtfrom,
CAST(RR.clmsrvdtthru AS VARCHAR(MAX)) AS clmsrvdtthru,
CAST(RR.clmpddtfrom AS VARCHAR(MAX)) AS clmpddtfrom,
CAST(RR.clmpddtthru AS VARCHAR(MAX)) AS clmpddtthru,
CAST(RR.customer AS VARCHAR(MAX)) AS customer
from REPORT_REQUEST RR 
where RR.reqestno = yyyyyy
UNION ALL
SELECT 
      CASE WHEN A.reqestno = B.reqestno THEN 'Yes' ELSE 'No'  END as reqestno,
      CASE WHEN A.receiveddate = B.receiveddate THEN 'Yes' ELSE 'No' END as receiveddate,
      CASE  WHEN A.rptcomments is null and B.rptcomments is null then 'NA' WHEN A.rptcomments = B.rptcomments THEN 'Yes' ELSE 'No' END rptcomments,
      CASE WHEN A.reportfrequency = B.reportfrequency THEN 'Yes' ELSE 'No' END as reportfrequency,
      CASE WHEN A.schedule = 'NONE' and B.schedule = 'NONE' THEN 'NA'WHEN A.schedule = B.schedule THEN 'Yes' ELSE 'No' END as schedule,
      CASE WHEN A.schedulebasedon = 'NONE' and B.schedulebasedon = 'NONE' THEN 'NA' WHEN A.schedulebasedon = B.schedulebasedon THEN 'Yes' ELSE 'No' END as schedulebasedon,
      CASE WHEN A.clmsrvdtfrom is null and B.clmsrvdtfrom is Null Then 'NA' WHEN A.clmsrvdtfrom = B.clmsrvdtfrom THEN 'Yes' ELSE 'No' END as clmsrvdtfrom,
      CASE WHEN A.clmsrvdtthru is null and B.clmsrvdtthru is null then 'NA' WHEN A.clmsrvdtthru = B.clmsrvdtthru THEN 'Yes' ELSE 'No' END as clmsrvdtthru,
      CASE WHEN A.clmpddtfrom is Null and B.clmpddtfrom is null then 'NA' WHEN A.clmpddtfrom = B.clmpddtfrom THEN 'Yes' ELSE 'No' END as clmpddtfrom,
      CASE WHEN A.clmpddtthru is null and B.clmpddtthru is null then 'NA' WHEN A.clmpddtthru = B.clmpddtthru THEN 'Yes' ELSE 'No' END as clmpddtthru,
      CASE WHEN A.customer = B.customer THEN 'Yes' ELSE 'No' END as customer

FROM
            (SELECT  reqestno,receiveddate,rptcomments,reportfrequency,schedule,schedulebasedon,clmsrvdtfrom,
clmsrvdtthru,clmpddtfrom,clmpddtthru,customer  FROM REPORT_REQUEST WHERE reqestno = xxxxxx) AS A
INNER JOIN
                 (SELECT  reqestno,receiveddate,rptcomments,reportfrequency,schedule,schedulebasedon,clmsrvdtfrom,
clmsrvdtthru,clmpddtfrom,clmpddtthru,customer  FROM REPORT_REQUEST WHERE reqestno = yyyyyy) AS B
      ON 1 = 1

質問 最初の2行を比較した後、3番目の行に「NO」の値のみを持つ列のみを表示し、比較でYESまたはNAが返される場合は常に他の列を非表示にするには、上記のクエリをどのように編集すればよいですか。 3行すべてを表示するには(2行のデータ+1行の比較

助けが必要ですよろしくお願いします

4

2 に答える 2

0

基本的に、UNIONクエリをサブクエリに入れて制限します。私はあなたのモンスタークエリをコピーするつもりはありません— SSCCE(短い、自己完結型、正しい例)を読んでください—しかし:

 SELECT r.*
   FROM (SELECT Value1, Value2
           FROM SomeWhere
          WHERE SomeColumn = 234
         UNION
         SELECT Value1, Value2
           FROM ElseWhere
          WHERE ElseColumn = 432
        ) AS r
  WHERE Value1 > 37 OR Value2 < 91

また、OLAPコードを使用して何かを行う必要がある場合もあります。問題のある「3行目」についておっしゃっています— SQLはセットベースの言語であり、順序付けは自然ではありません(ただし、実行は可能です)。

于 2013-03-06T01:16:42.467 に答える
0

ONの表現を、でINNER JOIN接続された「NO」条件に変更することをお勧めしますand

于 2013-03-06T01:13:10.673 に答える