これを 1 つの方法で実行する方法は知っていますが、作成したクエリの実行には約 1:30 かかります。システムの制限により、これを最適化して高速化する必要があります。これを行うために同じテーブルの複数の結合を使用しましたが、使用できるより短いクエリまたはより効率的なクエリがあるかどうか疑問に思っていました。
クエリのサンプルを示しましたが、以下で参照されている OrderItemFormDateFields テーブルの行から約 100 列が抽出されています。列を作成したところ、必要な結果が得られましたが、やはり遅いです。テーブルに関する詳細情報が必要な場合はお知らせください。
基本的に、各列をリストするのではなく、動的に入力する方法を探していると思います。ピボットとケース ステートメントでいくつかの異なる方法を見てきましたが、まだピボットにはあまり適していません。ありがとう!
SELECT
OrderNumber
,Product
,OrderDate
, oifd1.value as 'ADD_SUBJ_ADDRESS'
, oifd2.value as 'ADD_SUBJ_BATHS'
, oifd3.value as 'ADD_SUBJ_BEDROOMS'
, oifd4.value as 'ADD_SUBJ_DATE'
, oifd5.value as 'ADD_SUBJ_GLA'
FROM(
SELECT CAST(oi.orderid as VARCHAR(MAX))+'.'+CAST(oi.orderitemid as VARCHAR(MAX)) as OrderNumber
,p.abbreviation as product, o.orderdate
FROM OrderItems oi
join products p on p.productid = oi.productid
join orders o on o.orderid = oi.orderid)x
left join orderitemformdatafields oifd1 on oifd1.orderreference = OrderNumber and oifd1.fieldname in ( 'SUBJ_STREET_ADDR')
left join orderitemformdatafields oifd2 on oifd2.orderreference = OrderNumber and oifd2.fieldname in ( 'ADD_SUBJ_BATHS')
left join orderitemformdatafields oifd3 on oifd3.orderreference = OrderNumber and oifd3.fieldname in ( 'ADD_SUBJ_BEDROOMS')
left join orderitemformdatafields oifd4 on oifd4.orderreference = OrderNumber and oifd4.fieldname in ( 'ADD_SUBJ_DATE')
left join orderitemformdatafields oifd5 on oifd5.orderreference = OrderNumber and oifd5.fieldname in ( 'ADD_SUBJ_GLA')