Я видел другие подобные вопросы, и я попытался реализовать множество решений, но до сих пор ничего не понял. Эти конкретные вопросы требуют немного большей сложности. Что мне нужно сделать, так это создать таблицу и соединить столбцы с правой стороны в зависимости от определенного критерия. Это кажется достаточно простым, но есть несколько ударов, с которыми я сталкиваюсь.Расширенные инструкции SQL Select и Union
таблицы следующим образом:
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
колонка «данные» заполняется с использованием таблицы ADC_DATA_COLLECTION_DATA. Первым экземпляром «данных» будет поле данных в ADC_DATA_COLLECTION_DATA, где DATA_ELEMENT_NUMBER = 1. Второй экземпляр «данных» будет полем «данные» в ADC_DATA_COLLECTION_DATA, где DATA_ELEMENT_NUMBER = 2 ... и так далее.
Самое дальнее, что я получил, это использование инструкции объединения, за исключением того, что у меня есть нули в местах, где я их не хочу. Код, который я использовал, и результаты публикуются ниже. Пока я только написал код для первых двух столбцов данных.
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
Результат этого появляется с нулевыми значениями, которые я не хочу иметь.
Если вы можете предложить явное решение, используя заявление объединения или исправить этот союзный подход, это было бы очень признательно. Заранее спасибо!
Может поворотное запрос, что вам нужно: http://asktom.oracle.com/ pls/asktom/f? p = 100: 11: 0 :::: p11_question_id: 766825833740 –
Что значит «нули в местах?» Вы можете использовать COALESCE(), чтобы изменить Nulls на все, что захотите. e, g COALESCE (locationlabel, 'NA') – rheitzman