Ошибка преобразования PL / SQL в T-SQL - PullRequest
0 голосов
/ 08 июня 2018

Работает над преобразованием следующего оператора в T-SQL из PL / SQL (работа в процессе).Однако я столкнулся с ошибкой в ​​SQL Server.

SELECT COUNT(*) OVER() AS RW_CNT
  ,COUNT(*) OVER( PARTITION BY(P.PLACEMENT_HISTORY_ID)) AS DP_CNT
  ,P.PLACEMENT_HISTORY_ID AS DD_PLCMT_HIST_ID
  ,U.ES_PARTICIPANT_KEY
  ,A.ES_PARTICIPANT_ATTR_KEY
  ,ISNULL(CENTER.ES_ORG_KEY, 0) AS ES_CENTER_ORG_KEY
  ,ISNULL(O.ES_ORG_KEY, 0) AS ES_LOCAL_UNIT_KEY
  ,ISNULL(STK.ES_ORG_KEY, 0) AS ES_STAKE_UNIT_KEY
  ,ISNULL(PED.ES_EMPLOYER_KEY, 0) AS ES_PLCMT_EMPLOYER_KEY
  ,ISNULL(PD.ES_PARTICIPANT_KEY, 0) AS ES_CREATOR_USERS_KEY
  ,CONVERT(VARCHAR(8), CONVERT(DATE,P.PLACED_DATE), 112) AS PLACED_DATE_KEY
  ,CONVERT(VARCHAR(8), CONVERT(DATE,P.CREATED_DATE), 112) AS PLCMT_RECORDED_DATE_KEY
  ,CONVERT(DATETIME, CONVERT(DATE,GETDATE())) AS LOAD_DATE
  ,1 AS PLCMT_CNT
  ,CASE WHEN P.PLACEMENT_TYPE = 0 THEN 1 ELSE 0 END AS OBTAIN_JOB_CNT
  ,CASE WHEN P.PLACEMENT_TYPE = 2 THEN 1 ELSE 0 END AS ENROLL_SBA_CNT
  ,CASE WHEN P.PLACEMENT_TYPE = 3 THEN 1 ELSE 0 END AS STARTED_BUSINESS_CNT
  ,CASE WHEN P.PLACEMENT_TYPE = 1 THEN 1 ELSE 0 END AS BEGIN_EDU_TRAINING_CNT
  ,U.MEMBER_1_0_FLAG AS MEMBER_CNT
  ,CASE WHEN P.DI_FUNDED = 'Y' THEN 1 ELSE 0 END AS DI_FUNDED_CNT
  ,ISNULL(DTP.DAYS_TO_PLCMT, PF.DAYS_TO_PLCMT) AS DAYS_TO_PLCMT
  ,ISNULL(LD.LOCAL_COUNCIL_KEY, isnull(OVERRIDE_LC.Local_Council_Key, 1)) AS LOCAL_COUNCIL_KEY
   FROM DSS_ERS_STAGE.ES_W_PLCMT_HIST P
   LEFT JOIN DSS_ERS_STAGE.ES_PARTICIPANT_DIM U ON (P.CANDIDATE_ID = 
   U.CANDIDATE_ID)
   LEFT JOIN DSS_ERS_STAGE.ES_W_USER WU ON (U.USER_ID = WU.USER_ID)
   LEFT JOIN DSS_ERS_STAGE.ES_ORG_DIM O ON (WU.HOME_UNIT_NUMBER = 
   O.UNIT_NUMBER AND O.ORG_TYPE_ID IN (7,8) AND O.ORG_STATUS_CODE = 1)
   LEFT JOIN DSS_ERS_STAGE.ES_ORG_DIM STK ON (O.STK_DIST_ORG_ID = STK.ORG_ID 
   AND STK.ORG_TYPE_ID IN (5,6) AND STK.ORG_STATUS_CODE = 1)
   LEFT JOIN DSS_ERS_STAGE.ES_ORG_DIM CENTER ON (O.RSC_CNTR_ORG_ID = 
   CENTER.ORG_ID AND (CENTER.ORG_TYPE_ID IN (60,61)) AND 
   (CENTER.ORG_STATUS_CODE =1))
   LEFT JOIN DSS_ERS_STAGE.ES_PARTICIPANT_ATTR_DIM A ON (A.ID_AS_VARCHAR = 
   (ISNULL(U.PROF_VISIBLE_1_0_FLAG, '') +
                                    ISNULL(U.PROF_STAFF_1_0_FLAG, '') +
                                    ISNULL(U.DI_ASSOCIATE_1_0_FLAG, '') +
                                    ISNULL(U.PEF_STUDENT_1_0_FLAG, '') +
                                    ISNULL(0, '') +
                                    ISNULL(U.BISHOP_REPORT_1_0_FLAG, '') +
                                    ISNULL(U.PROFILE_ACTIVE_1_0_FLAG, '') +
                                    ISNULL(U.MEMBER_1_0_FLAG, '') +
                                    ISNULL(U.ACCELERATED_1_0_FLAG, '') +
                                    ISNULL(CASE WHEN P.DI_FUNDED = 'Y' THEN 
 1 ELSE 0 END, '')))
 LEFT JOIN DSS_ERS_STAGE.ES_PLCMT_EMPLOYER_DIM PED ON 
(P.PLACEMENT_HISTORY_ID = PED.CAND_HIST_PLCMT_ID)   
LEFT JOIN DSS_ERS_STAGE.ES_PARTICIPANT_DIM PD ON (P.CREATED_BY_USER = 
PD.USER_ID)    
LEFT JOIN DSS_ERS_STAGE.ES_W_DTP_MAPPING_SS DTP ON (P.PLACEMENT_HISTORY_ID = 
DTP.PLACEMENT_HISTORY_ID)
LEFT JOIN DSS_ERS_STAGE.ES_PLACEMENT_FACT PF ON (P.PLACEMENT_HISTORY_ID = 
PF.DD_PLCMT_HIST_ID)
LEFT JOIN DSS_ERS_STAGE.ES_LOCAL_COUNCIL_DIM LD ON (P.LOCAL_COUNCIL = 
LD.LOCAL_COUNCIL_ID)
LEFT JOIN DSS_ERS_STAGE.ES_LOCAL_COUNCIL_DIM OVERRIDE_LC ON 
(STK.LOCAL_COUNCIL = OVERRIDE_LC.LOCAL_COUNCIL_NAME)                                                                                           
--WHERE P.PLACEMENT_HISTORY_ID = 1215
GROUP BY 
   P.PLACEMENT_HISTORY_ID
  ,U.ES_PARTICIPANT_KEY
  ,A.ES_PARTICIPANT_ATTR_KEY
  ,CENTER.ES_ORG_KEY
  ,O.ES_ORG_KEY
  ,STK.ES_ORG_KEY
  ,CONVERT(VARCHAR(8), CONVERT(DATE,P.PLACED_DATE), 112)
  ,CONVERT(VARCHAR(8), CONVERT(DATE,P.CREATED_DATE), 112)
  ,CONVERT(DATETIME, CONVERT(DATE,GETDATE()))
  ,CASE WHEN P.PLACEMENT_TYPE = 0 THEN 1 ELSE 0 END
  ,CASE WHEN P.PLACEMENT_TYPE = 2 THEN 1 ELSE 0 END
  ,CASE WHEN P.PLACEMENT_TYPE = 3 THEN 1 ELSE 0 END
  ,CASE WHEN P.PLACEMENT_TYPE = 1 THEN 1 ELSE 0 END
  ,U.MEMBER_1_0_FLAG
  ,CASE WHEN P.DI_FUNDED = 'Y' THEN 1 ELSE 0 END
  ,PED.ES_EMPLOYER_KEY
  ,PD.ES_PARTICIPANT_KEY
  ,ISNULL(DTP.DAYS_TO_PLCMT, PF.DAYS_TO_PLCMT)
  ,ISNULL(LD.LOCAL_COUNCIL_KEY, isnull(OVERRIDE_LC.Local_Council_Key, 1))

Я получаю эту ошибку в SQL Server.Это довольно неоднозначно.Ресурсы, которые я нашел в сети, не очень помогли понять, в чем здесь проблема.

Msg 164, Level 15, State 1, Line 55
Each GROUP BY expression must contain at least one column that is not an 
outer reference.

* Я добавляю это предложение, потому что stackoverflow говорит мне, что мой пост в основном код и что мне нужно больше деталей ......

1 Ответ

0 голосов
/ 08 июня 2018

Вы получаете эту ошибку, когда у вас есть константа в качестве ключа в GROUP BY.По какой-то причине это беспокоит SQL Server.

В вашем случае «константа» выглядит так:

CONVERT(DATETIME, CONVERT(DATE, GETDATE()))

Просто удалите это из клавиш GROUP BY.

(И, что касается записи, каждая ссылка на GETDATE() оценивается один раз за запрос, поэтому для этой цели она является «константой».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...