Sql server 交叉连接需要帮助吗

Sql server 交叉连接需要帮助吗,sql-server,select,subquery,Sql Server,Select,Subquery,我发现以下错误: 信息156,第15级,状态1,第4行 关键字“CROSS”附近的语法不正确 味精156,第15级,状态1,第6行 关键字“CROSS”附近的语法不正确 Msg 156,第15级,状态1,第8行 关键字“CROSS”附近的语法不正确 Msg 156,第15级,状态1,第10行 关键字“CROSS”附近的语法不正确 Msg 102,15级,状态1,第12行 附近的语法不正确 子查询属于括号。大多数数据库管理系统还需要它们的名称: SELECT * FROM (SELEC

我发现以下错误:

信息156,第15级,状态1,第4行 关键字“CROSS”附近的语法不正确

味精156,第15级,状态1,第6行 关键字“CROSS”附近的语法不正确

Msg 156,第15级,状态1,第8行 关键字“CROSS”附近的语法不正确

Msg 156,第15级,状态1,第10行 关键字“CROSS”附近的语法不正确

Msg 102,15级,状态1,第12行 附近的语法不正确


子查询属于括号。大多数数据库管理系统还需要它们的名称:

SELECT * 
FROM 
    (SELECT 
         SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR 
     FROM 
         INSIGHTSOURCE.BS.RE_CRF_GL 
     WHERE 
         CONSOL_KEY10 = 'CUR' 
     GROUP BY 
         Consol_Key10

     CROSS JOIN

     SELECT 
         SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR 
     FROM 
         INSIGHTSOURCE.BS.RE_CRF_GL 
     WHERE 
         CONSOL_KEY10 IN ('REG','WCL') 
     GROUP BY 
         Consol_Key10

     CROSS JOIN

     SELECT 
         SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR 
     FROM 
         INSIGHTSOURCE.BS.RE_CRF_GL 
     WHERE 
         CONSOL_KEY10 IN ('OAM', 'SUB') 
     GROUP BY 
         Consol_Key10

     CROSS JOIN

     SELECT 
         SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR 
     FROM 
         INSIGHTSOURCE.BS.RE_CRF_GL 
     WHERE 
         CONSOL_KEY10 IN ('DBT', 'LOS') 
     GROUP BY 
         Consol_Key10

     CROSS JOIN

     SELECT 
         SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR 
     FROM 
         INSIGHTSOURCE.BS.RE_CRF_GL 
     WHERE 
         CONSOL_KEY10 IN ('CHO') 
     GROUP BY 
         Consol_Key10
)

对每个子查询使用别名和别名

SELECT * 
FROM
  (SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR
   FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 = 'CUR' GROUP BY Consol_Key10) q1
CROSS JOIN
  (SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR
   FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('REG','WCL') GROUP BY Consol_Key10) q2
CROSS JOIN
  (SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR
   FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('OAM','SUB') GROUP BY Consol_Key10) q3
CROSS JOIN
  (SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR
   FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('DBT','LOS') GROUP BY Consol_Key10) q4
CROSS JOIN
  (SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR
   FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('CHO') GROUP BY Consol_Key10) q5;

采取更小的步骤。使用一个交叉联接创建一个小查询。然后进行下一步。您希望输出中有多少列和行?您有5列,全部称为DR,包含各种不同的值。当无法区分每个查询的结果时,您打算如何访问这些数据?我会尝试使用UNION ALL而不是交叉联接。
SELECT * FROM (
(SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 = 'CUR' GROUP BY Consol_Key10) AS t1
CROSS JOIN
(SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('REG','WCL') GROUP BY Consol_Key10) AS t2
CROSS JOIN
(SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('OAM','SUB') GROUP BY Consol_Key10) AS t3
CROSS JOIN
(SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('DBT','LOS') GROUP BY Consol_Key10) AS t4
CROSS JOIN
(SELECT SUM(CASE WHEN LOCAL_CCY_AMT < 0 THEN LOCAL_CCY_AMT END) AS DR FROM INSIGHTSOURCE.BS.RE_CRF_GL WHERE CONSOL_KEY10 IN ('CHO') GROUP BY Consol_Key10) AS t5
)