У меня есть две таблицы: ck_startup
и ck_price
. Таблица цен содержит столбцы cu_type
, prd_type
, part_cd
, qty
и dllrs
. Таблица запуска связана с таблицей цен через отношение «один ко многим» на ck_startup.prd_type_cd = ck_price.prd_type
.
Таблица цен содержит несколько записей для одного и того же продукта / детали / количества, но для разных типов клиентов. Не все типы клиентов имеют одинаковую уникальную комбинацию этих трех значений. Я пытаюсь создать запрос, который будет делать две вещи:
- Присоедините несколько столбцов от
ck_startup
кck_price
(описание и некоторые дополнительные значения). - Присоединитесь к
ck_price
с помощью столбцаdllrs
для каждого типа клиентов. Таким образом, у меня будет только один экземпляр каждого уникального ключа product / part / qty и значение в столбце цены каждого клиента, если оно у них есть.
Я никогда не работал с самосоединяющимися таблицами, и до сих пор я могу получать записи только в тех случаях, когда у обоих клиентов есть одинаковые варианты.
И поскольку кто-то потребует, чтобы я разместил образец кода, вот дерьмовый запрос, который не показывает отсутствующие цены:
select pa.*, pac.dllrs from ck_price pa
join ck_price pac on pa.prd_type = pac.prd_type and pa.part_carbon_cd = pac.part_carbon_cd and pa.qty = pac.qty
where pa.cu_type = 'A' and pac.cu_type = 'AC';
РЕДАКТИРОВАТЬ: Вот образцы данных из двух таблиц и то, как я хочу, чтобы они выглядели, когда я закончу:
CK_STARTUP +-----+-----------------+-------------+ | CD | DSC | PRD_TYPE_CD | +-----+-----------------+-------------+ | 3D | Stuff | SKD3 | | DC | Different stuff | SKD | | DN2 | Similar stuff | SKD | +-----+-----------------+-------------+ CK_PRICE +---------+-------------+---------+-----+-------+ | CU_TYPE | PRD_TYPE_CD | PART_CD | QTY | DLLRS | +---------+-------------+---------+-----+-------+ | A | SKD3 | 1 | 100 | 10 | | A | SKD3 | 1 | 200 | 20 | | A | SKD3 | 1 | 300 | 30 | | A | SKD | 1 | 100 | 50 | | A | SKD | 1 | 200 | 100 | | AC | SKD3 | 1 | 300 | 30 | | AC | SKD | 1 | 100 | 100 | | AC | SKD | 1 | 200 | 200 | | AC | SKD | 1 | 300 | 300 | | AC | SKD | 1 | 400 | 400 | +---------+-------------+---------+-----+-------+ COMBO: +----+-----------------+---------+-----+---------+----------+ | CD | DSC | PART_CD | QTY | DLLRS_A | DLLRS_AC | +----+-----------------+---------+-----+---------+----------+ | 3D | Stuff | 1 | 100 | 10 | null | | 3D | Stuff | 1 | 200 | 20 | null | | 3D | Stuff | 1 | 300 | 30 | 60 | | DC | Different stuff | 1 | 100 | 50 | 100 | | DC | Different stuff | 1 | 200 | 100 | 200 | | DC | Different stuff | 1 | 300 | null | 300 | | DC | Different stuff | 1 | 400 | null | 400 | +----+-----------------+---------+-----+---------+----------+
CU_TYPE
вCU_PRICE
таблице? Это может измениться? Если это так, то то, что вы пытаетесь достичь, невозможно, поскольку у вас будет неизвестное количество столбцов.PIVOT
тоже не поможет, так как для него нужно предоставить статический список значений. - person Przemyslaw Kruglej   schedule 05.11.2013