Sql 我的问题?另外,请查看@craig的答案,他与我不同,掌握了OraclePIVOT查询。点击craig答案中的链接查看并运行查询。我认为错误的是max函数的限制。我的结果表只能返回数据元素为1的所有数据的最大值。我想要的是与所有“数据元素1”相关的数据这给

Sql 我的问题?另外,请查看@craig的答案,他与我不同,掌握了OraclePIVOT查询。点击craig答案中的链接查看并运行查询。我认为错误的是max函数的限制。我的结果表只能返回数据元素为1的所有数据的最大值。我想要的是与所有“数据元素1”相关的数据这给,sql,vb.net,oracle,oracle-sqldeveloper,Sql,Vb.net,Oracle,Oracle Sqldeveloper,我的问题?另外,请查看@craig的答案,他与我不同,掌握了OraclePIVOT查询。点击craig答案中的链接查看并运行查询。我认为错误的是max函数的限制。我的结果表只能返回数据元素为1的所有数据的最大值。我想要的是与所有“数据元素1”相关的数据这给了我一个巨大的起点,但还有一个不准确的地方需要修复。当实际上我需要返回所有数据元素时,max函数只检索一个值。目前,我只能从这个查询中得到1条记录。有什么方法可以提取多个记录吗?为了澄清,整个表中的数据元素编号有重叠,但每个事务ID只有一个数据


我的问题?另外,请查看@craig的答案,他与我不同,掌握了Oracle
PIVOT
查询。点击craig答案中的链接查看并运行查询。我认为错误的是max函数的限制。我的结果表只能返回数据元素为1的所有数据的最大值。我想要的是与所有“数据元素1”相关的数据这给了我一个巨大的起点,但还有一个不准确的地方需要修复。当实际上我需要返回所有数据元素时,max函数只检索一个值。目前,我只能从这个查询中得到1条记录。有什么方法可以提取多个记录吗?为了澄清,整个表中的数据元素编号有重叠,但每个事务ID只有一个数据元素编号。我的查询中有不准确的地方吗?另外,请查看@craig的答案,他与我不同,掌握了Oracle
PIVOT
查询。点击craig答案中的链接查看并运行查询。我认为错误的是max函数的限制。我的结果表只能返回数据元素为1的所有数据的最大值。我想要的是与所有“数据元素1号”相关的数据。我尝试了这个方法,看起来是一个非常可行的解决方案,但我根本无法理解这一点,因为我自己缺乏数据透视表的经验。实际上,这只需要一点研究。我理解它,它工作到完美!非常感谢你的帮助!我尝试过这个方法,它看起来是一个非常可行的解决方案,但由于我自己缺乏数据透视表方面的经验,我根本无法理解它的头绪。实际上,这只需要一点研究。我理解它,它工作到完美!非常感谢你的帮助!
ADC_DATA_COLLECTION_HEADER

(PK)Transaction_ID | BEMSID | DEVICE | TIMESTAMP | CONFIG_NAME

ADC_DATA_COLLECTION_APPS

(FK)CONFIG_NAME | NUM_DATA_ELEMENTS | DATA_ELEMENT1 | DATA_ELEMENT2 | DATA_ELEMENT3 | DATA_ELEMENT4


ADC_DATA_COLLECTION_DATA

(FK)TRANSACTION_ID | DATA_ELEMENT_NUMBER | DATA
TRANSACTION_ID | DEVICE | CONFIG_NAME | DATA | DATA | DATA | DATA
SELECT 
ADC_Data_Collection_header.BEMSID, 
ADC_Data_Collection_header.DEVICE, 
ADC_Data_Collection_header.CONFIG_NAME, 
null AS locationlabel, 
null AS partno 
/*null AS partno2, 
null AS DE4, 
null AS DE5, 
null AS DE6 */
FROM 
ADC_Data_Collection_header, 
ADC_Data_Collection_apps, 
ADC_Data_Collection_data 
WHERE 
ADC_Data_Collection_header.CONFIG_NAME = 'mobileScanning' 
AND ADC_Data_Collection_header.BEMSID = '2386531' 
AND ADC_Data_Collection_header.CONFIG_NAME = ADC_Data_Collection_apps.CONFIG_NAME 
AND (TO_DATE('7/19/2013','MM/DD/YYYY') <= timestamp AND TO_DATE('7/27/2013','MM/DD/YYYY') >= timestamp) 
AND ADC_DATA_COLLECTION_HEADER.transaction_ID = ADC_DATA_COLLECTION_DATA.Transaction_ID

UNION
SELECT
null as BEMSID, 
null as DEVICE, 
null as CONFIG_NAME,
ADC_Data_Collection_DATA.DATA AS locationlabel, 
null as partno
FROM 
ADC_DATA_COLLECTION_DATA,
ADC_Data_Collection_header, 
ADC_Data_Collection_apps
WHERE 
ADC_DATA_COLLECTION_DATA.DATA_ELEMENT_NUMBER = 3 
AND ADC_Data_Collection_header.CONFIG_NAME = 'mobileScanning' 
AND (TO_DATE('7/19/2013','MM/DD/YYYY') <= timestamp AND TO_DATE('7/27/2013','MM/DD/YYYY') >= timestamp) 
AND ADC_DATA_COLLECTION_HEADER.transaction_ID = ADC_DATA_COLLECTION_DATA.Transaction_ID

UNION
SELECT
null as BEMSID, 
null as DEVICE, 
null as CONFIG_NAME,
null as locationlabel,
ADC_Data_Collection_DATA.DATA AS partno
FROM 
ADC_DATA_COLLECTION_DATA,
ADC_Data_Collection_header, 
ADC_Data_Collection_apps
WHERE 
ADC_DATA_COLLECTION_DATA.DATA_ELEMENT_NUMBER = 4 
AND ADC_Data_Collection_header.CONFIG_NAME = 'mobileScanning' 
AND (TO_DATE('7/19/2013','MM/DD/YYYY') <= timestamp AND TO_DATE('7/27/2013','MM/DD/YYYY') >= timestamp) 
AND ADC_DATA_COLLECTION_HEADER.transaction_ID = ADC_DATA_COLLECTION_DATA.Transaction_ID
SELECT 
  Transaction_ID,
  MAX(CASE WHEN Data_Element_Number = 1 THEN Data END) AS Data1,
  MAX(CASE WHEN Data_Element_Number = 2 THEN Data END) AS Data2,
  MAX(CASE WHEN Data_Element_Number = 3 THEN Data END) AS Data3,
  MAX(CASE WHEN Data_Element_Number = 4 THEN Data END) AS Data4
FROM ADC_DATA_COLLECTION_DATA
GROUP BY Transaction_ID
select
    h.transaction_id,
    h.device,
    h.config_name,
    d.data1,
    d.data2,
    d.data3,
    d.data4
from
    ADC_DATA_COLLECTION_HEADER h
    inner join (
      select *
      from ADC_DATA_COLLECTION_DATA
      pivot
      (
          max(data)
          for data_element_number in (1 as data1, 2 as data2, 3 as data3, 4 as data4)
      )
    ) d
        on d.transaction_id = h.transaction_id
where
    (TO_DATE('7/19/2013','MM/DD/YYYY') <= timestamp AND TO_DATE('7/27/2013','MM/DD/YYYY') >= timestamp);