Mysql 不可能推荐其他解决方案

Mysql 不可能推荐其他解决方案,mysql,syntax,Mysql,Syntax,看起来您有两个CTE表,但只命名了一个。第二个启动(选择OTQUOT,DESC()。您可以将其命名(即,将其更改为,CALC2为(选择OTQUOT,DESC(…但我完全不知道在查询的其余部分中您到底想在哪里使用此表。SQL的风格和版本是什么?SQL Server?MySQL?请简化查询,使其尽可能小,但仍然会导致语法错误。此外,在堆栈溢出时,通常会放弃对有用答案的投票,并放弃click“接受”选中最能解决您问题的一个。只是说……在一个稍微相关的注释中,您的表是什么样子的?当您开始获得诸如OQCQ

看起来您有两个CTE表,但只命名了一个。第二个启动
(选择OTQUOT,DESC(
)。您可以将其命名(即,将其更改为
,CALC2为(选择OTQUOT,DESC(…
但我完全不知道在查询的其余部分中您到底想在哪里使用此表。

SQL的风格和版本是什么?SQL Server?MySQL?请简化查询,使其尽可能小,但仍然会导致语法错误。此外,在堆栈溢出时,通常会放弃对有用答案的投票,并放弃click“接受”选中最能解决您问题的一个。只是说……在一个稍微相关的注释中,您的表是什么样子的?当您开始获得诸如OQCQ06、OQCQ05等列名时,您很有可能遇到一些潜在的设计问题。@phild:好的一点,我忘了有一个最小的代表放弃投票权。我知道这是非常重要的nfusing..对不起!我使用第一个WITH CALC1 to WHERE T.RN>=1来获取quote nr和报告组,然后我想使用该报告组并在下一个查询中将其显示为列,这就是为什么我认为使用WITH语句会起作用..?嗨,比尔,谢谢你的帮助性回答。如果我在这里放了分号,它就不起作用了。其中T.RN>=1);选择A.OKPBRN、A.OCAREA、A.OTCCDE、A.OTCNAM、A.OTSMAN……我知道我听起来一定像个白痴,但这个问题完全把我弄糊涂了!
WITH CALC1 AS (SELECT OTQUOT, OTIT01 AS ITEMS, ROUND(OQCQ01 * OVRC01,2) AS COST
FROM  @LIB@.RTQOTA
WHERE OTIT01 <> ''

UNION ALL

SELECT OTQUOT, OTIT02 AS ITEMS, ROUND(OQCQ02 * OVRC02,2) AS COST
FROM  @LIB@.RTQOTA
WHERE OTIT02 <> ''

UNION ALL

SELECT OTQUOT, OTIT03 AS ITEMS, ROUND(OQCQ03 * OVRC03,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT03 <> ''

UNION ALL

SELECT OTQUOT, OTIT04 AS ITEMS, ROUND(OQCQ04 * OVRC04,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT04 <> ''

UNION ALL

SELECT OTQUOT, OTIT05 AS ITEMS, ROUND(OQCQ05 * OVRC05,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT05 <> ''

UNION ALL

SELECT OTQUOT, OTIT06 AS ITEMS, ROUND(OQCQ06 * OVRC06,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT06 <> ''

UNION ALL

SELECT OTQUOT, OTIT07 AS ITEMS, ROUND(OQCQ07 * OVRC07,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT07 <> ''

UNION ALL

SELECT OTQUOT, OTIT08 AS ITEMS, ROUND(OQCQ08 * OVRC08,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT08 <> ''

UNION ALL

SELECT OTQUOT, OTIT09 AS ITEMS, ROUND(OQCQ09 * OVRC09,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT09 <> ''

UNION ALL

SELECT OTQUOT, OTIT10 AS ITEMS, ROUND(OQCQ10 * OVRC10,2) AS COST
FROM @LIB@.RTQOTA
WHERE OTIT10 <> ''


)

(SELECT OTQUOT, DESC

FROM ( 
  SELECT OTQUOT, ITEMS, B.IXRPGP AS GROUP, C.OTRDSC AS DESC, COST, ROW_NUMBER() OVER 

(ORDER BY COST DESC) AS RN 

  FROM CALC1 AS A INNER JOIN @LIB@.ITMCON AS B ON (A.ITEMS = B.IKITMC) INNER JOIN 

DATAGRP.GDSGRP AS C ON (B.IXRPGP = C.OKRPGP)


) T 

WHERE T.RN >= 1)

SELECT 

A.OKPBRN,

A.OCAREA,

A.OTCCDE,

A.OTCNAM,

A.OTSMAN,

A.OKPBRN||A.OAPNUM AS OTQUOT,

A.OTONUM,

A.OTCAD1,

A.OTCAD2,

A.OTCAD3,

A.OTPCDE,

A.OTDEL1,

A.OTDEL2,

A.OTDEL3,

CHAR(DATE(CASE WHEN SUBSTR(A.ODOQDT,5,4) = '0000' THEN '0001' ELSE SUBSTR(A.ODOQDT,5,4) 

END ||'-'||

CASE WHEN SUBSTR(A.ODOQDT,4,2) = '00' THEN '01' ELSE SUBSTR(A.ODOQDT,3,2) END ||'-'||

CASE WHEN SUBSTR(A.ODOQDT,1,2) = '00' THEN '01' ELSE SUBSTR(A.ODOQDT,1,2) END), ISO) AS 

ODOQDT_CCYYMMDD,

CHAR(DATE(CASE WHEN SUBSTR(A.ODDELD,7,2) = '' THEN '0001' ELSE '20'||SUBSTR(A.ODDELD,7,2) 

END ||'-'||

CASE WHEN SUBSTR(A.ODDELD,4,2) = '' THEN '01' ELSE SUBSTR(A.ODDELD,4,2) END ||'-'||

CASE WHEN SUBSTR(A.ODDELD,1,2) = '' THEN '01' ELSE SUBSTR(A.ODDELD,1,2) END), ISO) AS 

ODDELD_CCYYMMDD,

B.DESC,

A.OVQTVL

FROM 

@LIB@.RTQCTL AS A INNER JOIN CALC1 AS B ON (A.OKPBRN||A.OAPNUM = B.OTQUOT)

WHERE 

A.OKPBRN = '@OKPBRN@'

AND A.OTCCDE NOT LIKE '*DEP%'

AND CHAR(DATE(CASE WHEN SUBSTR(A.ODOQDT,5,4) = '0000' THEN '0001' ELSE SUBSTR

(A.ODOQDT,5,4) END ||'-'||

CASE WHEN SUBSTR(A.ODOQDT,4,2) = '00' THEN '01' ELSE SUBSTR(A.ODOQDT,3,2) END ||'-'||

CASE WHEN SUBSTR(A.ODOQDT,1,2) = '00' THEN '01' ELSE SUBSTR(A.ODOQDT,1,2) END), ISO) >=

CHAR(CURDATE() - 3 MONTH, ISO)

AND A.OCQF01 = '0'
AND A.OCQF02 = '0'
AND A.OCQF04 = '0'
AND A.OCQF05 = '0'
AND A.OCQF06 = '0'
AND A.OCQF07 = '0'
AND A.OCQF08 = '0'
AND A.OCQF09 = '0'
AND A.OCQF10 = '1'
AND A.OTCGRP LIKE 'S/%'

ORDER BY 
A.OTSMAN ASC,
A.OVQTVL DESC,
CHAR(DATE(CASE WHEN SUBSTR(A.ODDELD,7,2) = '' THEN '0001' ELSE '20'||SUBSTR(A.ODDELD,7,2) END ||'-'||
CASE WHEN SUBSTR(A.ODDELD,4,2) = '' THEN '01' ELSE SUBSTR(A.ODDELD,4,2) END ||'-'||
CASE WHEN SUBSTR(A.ODDELD,1,2) = '' THEN '01' ELSE SUBSTR(A.ODDELD,1,2) END),ISO) ASC
(SELECT * FROM foo)
UNION ALL
(SELECT * FROM bar)
. . .
WHERE T.RN >= 1)

SELECT A.OKPBRN, A.OCAREA, A.OTCCDE, A.OTCNAM, A.OTSMAN,
. . .