我是否需要创建一个数据透镜,或者我可以更改此查询/添加了测试数据的链接

时间:2015-08-15 02:18:43

标签: sql-server tsql

我写的以下查询正在努力。我发现的问题是每个泵,电缆等都可以在每个零件列中列出。例如:

cross-browser compatibility explained

我想得到的是每个泵,电缆等都列好的,而不是我目前得到的,这只是第一个泵,电缆等。

这是我正在运行的查询:

Pull Date| Well_Name | BODH1 | BODH1_PN | BODH1_SN | BODH2 | BODH2_PN | BODH2_SN

以下是我目前收到的一个例子:

enter image description here

我对SQL Server PIVOT不是很熟悉,或者在这种情况下甚至需要它。

我感谢您提供的任何帮助,并提前感谢您。

编辑:

不幸的是我无法添加我想要的图片,所以我会尝试解释它。

我想将它全部放在一行,所以看起来有点像这样:

@objc

泵,电缆,MLE等也会重复。我有20个部分的列,我想拉它们,所以我可以轻松地将pump1排序通过泵5(有些井有5个更少)。最终,这些数据将被插入到另一个表中以进行更新。

编辑2: 链接到我创建的测试数据enter image description here

1 个答案:

答案 0 :(得分:1)

我将调查Dynamic Pivot以供日后使用,但这解决了我的问题(是的,它非常无聊和丑陋):

Select Pull_Date, Well_Name,
          MIN(CASE WHEN Part1 ='BODH' THEN 'BODH' ELSE NULL END) [BODH1],
          MIN(CASE WHEN Part1 ='BODH' THEN Part1_PN Else NULL END) BODH1_PN,
          MIN(CASE WHEN Part1 ='BODH' THEN Part1_SN ELSE NULL END) BODH1_SN,
          MIN(CASE WHEN Part2 ='BODH' THEN 'BODH' ELSE NULL END) [BODH2],
          MIN(CASE WHEN Part2 ='BODH' THEN Part2_PN Else NULL END) BODH2_PN,
          MIN(CASE WHEN Part2 ='BODH' THEN Part2_SN ELSE NULL END) BODH2_SN,
          MIN(CASE WHEN Part3 ='BODH' THEN 'BODH' ELSE NULL END) [BODH3],
          MIN(CASE WHEN Part3 ='BODH' THEN Part3_PN Else NULL END) BODH3_PN,
          MIN(CASE WHEN Part3 ='BODH' THEN Part3_SN ELSE NULL END) BODH3_SN,
          MIN(CASE WHEN Part4 ='BODH' THEN 'BODH' ELSE NULL END) [BODH4],
          MIN(CASE WHEN Part4 ='BODH' THEN Part4_PN Else NULL END) BODH4_PN,
          MIN(CASE WHEN Part4 ='BODH' THEN Part4_SN ELSE NULL END) BODH4_SN,
          MIN(CASE WHEN Part5 ='BODH' THEN 'BODH' ELSE NULL END) [BODH5],
          MIN(CASE WHEN Part5 ='BODH' THEN Part5_PN Else NULL END) BODH5_PN,
          MIN(CASE WHEN Part5 ='BODH' THEN Part5_SN ELSE NULL END) BODH5_SN,
          MIN(CASE WHEN Part1 ='Cable' THEN 'Cable' ELSE NULL END) [Cable1],
          MIN(CASE WHEN Part1 ='Cable' THEN Part1_PN Else NULL END) Cable1_PN,
          MIN(CASE WHEN Part1 ='Cable' THEN Part1_SN ELSE NULL END) Cable1_SN,
          MIN(CASE WHEN Part2 ='Cable' THEN 'Cable' ELSE NULL END) [Cable2],
          MIN(CASE WHEN Part2 ='Cable' THEN Part2_PN Else NULL END) Cable2_PN,
          MIN(CASE WHEN Part2 ='Cable' THEN Part2_SN ELSE NULL END) Cable2_SN,
          MIN(CASE WHEN Part3 ='Cable' THEN 'Cable' ELSE NULL END) [Cable3],
          MIN(CASE WHEN Part3 ='Cable' THEN Part3_PN Else NULL END) Cable3_PN,
          MIN(CASE WHEN Part3 ='Cable' THEN Part3_SN ELSE NULL END) Cable3_SN,
          MIN(CASE WHEN Part4 ='Cable' THEN 'Cable' ELSE NULL END) [Cable4],
          MIN(CASE WHEN Part4 ='Cable' THEN Part4_PN Else NULL END) Cable4_PN,
          MIN(CASE WHEN Part4 ='Cable' THEN Part4_SN ELSE NULL END) Cable4_SN,
          MIN(CASE WHEN Part5 ='Cable' THEN 'Cable' ELSE NULL END) [Cable5],
          MIN(CASE WHEN Part5 ='Pump' THEN Part5_PN Else NULL END) Pump5_PN,
          MIN(CASE WHEN Part5 ='Pump' THEN Part5_SN ELSE NULL END) Pump5_SN,
          MIN(CASE WHEN Part1 ='Pump' THEN 'Pump' ELSE NULL END) [Pump1],
          MIN(CASE WHEN Part1 ='Pump' THEN Part1_PN Else NULL END) Pump1_PN,
          MIN(CASE WHEN Part1 ='Pump' THEN Part1_SN ELSE NULL END) Pump1_SN,
          MIN(CASE WHEN Part2 ='Pump' THEN 'Pump' ELSE NULL END) [Pump2],
          MIN(CASE WHEN Part2 ='Pump' THEN Part2_PN Else NULL END) Pump2_PN,
          MIN(CASE WHEN Part2 ='Pump' THEN Part2_SN ELSE NULL END) Pump2_SN,
          MIN(CASE WHEN Part3 ='Pump' THEN 'Pump' ELSE NULL END) [Pump3],
          MIN(CASE WHEN Part3 ='Pump' THEN Part3_PN Else NULL END) Pump3_PN,
          MIN(CASE WHEN Part3 ='Pump' THEN Part3_SN ELSE NULL END) Pump3_SN,
          MIN(CASE WHEN Part4 ='Pump' THEN 'Pump' ELSE NULL END) [Pump4],
          MIN(CASE WHEN Part4 ='Pump' THEN Part4_PN Else NULL END) Pump4_PN,
          MIN(CASE WHEN Part4 ='Pump' THEN Part4_SN ELSE NULL END) Pump4_SN,
          MIN(CASE WHEN Part5 ='Pump' THEN 'Pump' ELSE NULL END) [Pump5],
          MIN(CASE WHEN Part5 ='Pump' THEN Part5_PN Else NULL END) Pump5_PN,
          MIN(CASE WHEN Part5 ='Pump' THEN Part5_SN ELSE NULL END) Pump5_SN,
          MIN(CASE WHEN Part1 ='Sensor' THEN 'Sensor' ELSE NULL END) [Sensor1],
          MIN(CASE WHEN Part1 ='Sensor' THEN Part1_PN Else NULL END) Sensor1_PN,
          MIN(CASE WHEN Part1 ='Sensor' THEN Part1_SN ELSE NULL END) Sensor1_SN,
          MIN(CASE WHEN Part2 ='Sensor' THEN 'Sensor' ELSE NULL END) [Sensor2],
          MIN(CASE WHEN Part2 ='Sensor' THEN Part2_PN Else NULL END) Sensor2_PN,
          MIN(CASE WHEN Part2 ='Sensor' THEN Part2_SN ELSE NULL END) Sensor2_SN,
          MIN(CASE WHEN Part3 ='Sensor' THEN 'Sensor' ELSE NULL END) [Sensor3],
          MIN(CASE WHEN Part3 ='Sensor' THEN Part3_PN Else NULL END) Sensor3_PN,
          MIN(CASE WHEN Part3 ='Sensor' THEN Part3_SN ELSE NULL END) Sensor3_SN,
          MIN(CASE WHEN Part4 ='Sensor' THEN 'Sensor' ELSE NULL END) [Sensor4],
          MIN(CASE WHEN Part4 ='Sensor' THEN Part4_PN Else NULL END) Sensor4_PN,
          MIN(CASE WHEN Part4 ='Sensor' THEN Part4_SN ELSE NULL END) Sensor4_SN,
          MIN(CASE WHEN Part5 ='Sensor' THEN 'Sensor' ELSE NULL END) [Sensor5],
          MIN(CASE WHEN Part5 ='Sensor' THEN Part5_PN Else NULL END) Sensor5_PN,
          MIN(CASE WHEN Part5 ='Sensor' THEN Part5_SN ELSE NULL END) Sensor5_SN
 FROM Test
 GROUP BY Pull_Date, Well_Name