我知道如何做到这一点,但我创建的查询需要大约1:30运行,并且由于系统限制,我需要优化它以加快速度。我曾使用同一个表的多个连接来做到这一点,但想知道是否有一个更短的查询或更有效的查询我可以使用。将列转换为行
我给出了一个查询的例子,但它确实有大约100列从下面引用的OrderItemFormDateFields表上的行。我创建了专栏,我得到了我需要的结果,但是它的速度很慢。让我知道你是否需要关于表格的更详细的信息。
我想即时通讯基本上寻找一种方式来动态填充而不是列出每列。我已经看到了几种不同的方式与枢轴和案例陈述,但我还没有很好的枢轴,情况似乎会更加低效。谢谢!
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')
它确实感谢你!我在理解枢轴方面遇到了很多麻烦,但这对我有很大的帮助。为什么你要说MAX(Value)?这些字段应该只有每个订单号的每个字段有一个值,那么这仅仅是语法的一个要求,还是出于某种目的? – wondergoat77
我只是把这与我的100 +行的枢轴,并减少了我的查询时间从1:30 ish到不到一分钟!再次感谢 – wondergoat77
@ wondergoat77枢轴需要一个聚合函数来处理多个值。你可以在那里使用任何聚合函数(sum/max/min ..)。 – Pradeeshnarayan