Показать сообщение отдельно
Старый 22.04.2016, 12:57   #46  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от 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