6

(設計が不適切な) SQL データベースから新しいデータ抽出を作成しようとしています。顧客は、NEWID() 関数を使用して実行しようとしている個別の識別子を追加することを要求しています。残念ながら、これにより複数の重複レコードが返されます。

少し調査した結果、NEWID() 関数は実際に、distinct キーワードの使用を「元に戻す」ことがわかりましたが、これを克服する理由や方法がわかりません。

私が書こうとしているクエリの例は次のとおりです。

select distinct

    NEWID() as UUID
    ,Histo_Results_File.ISRN
    ,Histo_Results_File.Internal_Patient_No
    ,Histo_Results_File.Date_of_Birth
    ,Histo_Result_freetext.histo_report
    ,Histo_Report.Date_Report_Updated  as [Investigation_Result_Date]

from apex.Histo_Results_File
            inner join apex.Histo_Report on (Histo_Report.Histo_Results_File = Histo_Results_File.ID)

選択ブロックの NEWID() 行を見逃した場合、569 件のレコードが返されますが、これは正しいのですが、その行を含めると 30,000 件を超えてしまい、元の 569 件とすべて重複していますが、ID が異なります。誰でもこの問題を回避する方法を提案できますか?

前もって感謝します

4

3 に答える 3

6

サブクエリを使用するのが最も簡単な方法です。

SELECT NEWID() as UUID
, * -- this is everything from below
FROM (
select distinct
     Histo_Results_File.ISRN
    ,Histo_Results_File.Internal_Patient_No
    ,Histo_Results_File.Date_of_Birth
    ,Histo_Result_freetext.histo_report
    ,Histo_Report.Date_Report_Updated  as [Investigation_Result_Date]

from apex.Histo_Results_File
            inner join apex.Histo_Report on (Histo_Report.Histo_Results_File = Histo_Results_File.ID)) as mySub
于 2015-08-27T15:18:50.090 に答える
1
select NEWID() as UUID
    ,ISRN
    ,Internal_Patient_No
    ,Date_of_Birth
    ,histo_report
    ,Investigation_Result_Date
from (
select distinct
    ,Histo_Results_File.ISRN
    ,Histo_Results_File.Internal_Patient_No
    ,Histo_Results_File.Date_of_Birth
    ,Histo_Result_freetext.histo_report
    ,Histo_Report.Date_Report_Updated  as [Investigation_Result_Date]

from apex.Histo_Results_File
            inner join apex.Histo_Report on (Histo_Report.Histo_Results_File = Histo_Results_File.ID)) t
于 2015-08-27T15:19:31.273 に答える
0

サブクエリを使用して問題を回避することができます....

SELECT NEWID() as UUID
      ,*
FROM (
select distinct
     Histo_Results_File.ISRN
    ,Histo_Results_File.Internal_Patient_No
    ,Histo_Results_File.Date_of_Birth
    ,Histo_Result_freetext.histo_report
    ,Histo_Report.Date_Report_Updated  as [Investigation_Result_Date]

from apex.Histo_Results_File
            inner join apex.Histo_Report 
 on (Histo_Report.Histo_Results_File = Histo_Results_File.ID)
 ) t
于 2015-08-27T15:18:42.857 に答える