Цитата:
Сообщение от
mazzy
нет, нельзя делать просто union.
для одного профиля может быть несколько подходящих настроек - и для конкретного значения Table, и для группы и для всех. Аксапта в этом случае выбирает ОДНУ настройку. union возвратит все подходящие. А настройка Все используется очень часто.
Решается с помощью обертки, но какая получится скорость - вопрос.
X++:
SELECT ACCOUNTNUM, ACCOUNTCODE, POSTINGPROFILE, DATAAREAID, RECID
, CASE WHEN MAX(Value0) <> '' THEN MAX(Value0) ELSE CASE WHEN MAX(Value1) <> '' THEN MAX(Value1) ELSE MAX(Value2) END END Value
FROM
(
select ct.ACCOUNTNUM, cla.ACCOUNTCODE, cla.POSTINGPROFILE, dim.DISPLAYVALUE Value0, '' Value1, '' Value2, cla.DATAAREAID, ct.RECID from CUSTTABLE as ct
join CUSTLEDGERACCOUNTS as cla on
ct.ACCOUNTNUM = cla.NUM and
ct.DATAAREAID = cla.DATAAREAID and
cla.ACCOUNTCODE = 0
join DIMENSIONATTRIBUTEVALUECOMBINATION as dim on
cla.SUMMARYLEDGERDIMENSION = dim.RECID
where
ct.DATAAREAID = 'usmf'
union
select ct1.ACCOUNTNUM, cla1.ACCOUNTCODE, cla1.POSTINGPROFILE, '', dim1.DISPLAYVALUE, '', cla1.DATAAREAID, ct1.RECID from CUSTTABLE as ct1
join CUSTLEDGERACCOUNTS as cla1 on
ct1.CUSTGROUP = cla1.NUM and
ct1.DATAAREAID = cla1.DATAAREAID and
cla1.ACCOUNTCODE = 1
join DIMENSIONATTRIBUTEVALUECOMBINATION as dim1 on
cla1.SUMMARYLEDGERDIMENSION = dim1.RECID
where
ct1.DATAAREAID = 'usmf'
union
select ct2.ACCOUNTNUM, cla2.ACCOUNTCODE, cla2.POSTINGPROFILE, '', '', dim2.DISPLAYVALUE, cla2.DATAAREAID, ct2.RECID from CUSTTABLE as ct2
join CUSTLEDGERACCOUNTS as cla2 on
ct2.DATAAREAID = cla2.DATAAREAID and
cla2.ACCOUNTCODE = 2
join DIMENSIONATTRIBUTEVALUECOMBINATION as dim2 on
cla2.SUMMARYLEDGERDIMENSION = dim2.RECID
where
ct2.DATAAREAID = 'usmf'
) T
GROUP BY ACCOUNTNUM, ACCOUNTCODE, POSTINGPROFILE, DATAAREAID, RECID