私はCOALESCEとFOR XMLを使用して何をしようとしているかの例をいくつか見てきました。私は構文の権利をあまり得られません。ここでT-SQLクエリ、複数の行の列を1つの列に結合する
は、私は(私は唯一のキーのものにフィールドが短くなります)持っているものです。
Table Fields
------ -------------------------------
Requisition ID, Number
IssuedPO ID, Number
Job ID, Number
Job_Activity ID, JobID (fkey)
RequisitionItems ID, RequisitionID(fkey), IssuedPOID(fkey), Job_ActivityID (fkey)
私はそれに関連するジョブとIssuedPOsで1行に1つの求人をリストするクエリを必要としています。 (請求番号は「R-」で始まり、ジョブ番号は「J-」で始まります)。
例:
R-123 | "PO1; PO2; PO3" | "J-12345; J-6780"
確かにアダム!
複数の行を返すクエリは次のとおりです。私は外側の結合を使用する必要があります。なぜなら、すべての要求がジョブやIssuedPOに割り当てられているRequisitionItemを持っているわけではないからです(その場合、fkey IDはもちろんnullになります)。
SELECT DISTINCT Requisition.Number, IssuedPO.Number, Job.Number
FROM Requisition
INNER JOIN RequisitionItem on RequisitionItem.RequisitionID = Requisition.ID
LEFT OUTER JOIN Job_Activity on RequisitionItem.JobActivityID = Job_Activity.ID
LEFT OUTER JOIN Job on Job_Activity.JobID = Job.ID
LEFT OUTER JOIN IssuedPO on RequisitionItem.IssuedPOID = IssuedPO.ID
クエリは、このようなことを行うのに最適な場所ではありません。何が欲しいのはSQLのリレーショナルな性質に反しています。グループ化は、アプリケーションコードまたはTransact-SQLストアドプロシージャコードで行うことができます。 – 9000
@ 9000私はそれが理想的にはSQLで行われたものではないことに同意しますが、ストアドプロシージャでこれを行う方がどのように「より良い」ものであるかはわかりません一時テーブルまたはメモリテーブル)。 –
@ adam-robinson:TSQLには、複数の行を1つの文字列にまとめるのに役立つカーソルループと可変変数があります。詳細クエリ全体を実行し、文字列にパックし、マスタークエリで使用する関数を作成できます。 – 9000