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的答案,他与我不同,掌握了OraclePIVOT
查询。点击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);