You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为UNION ALL中的EM_Main、OP_Main表添加同类型EBDP列

处理UNION ALL关联多表的列匹配问题

要通过UNION ALL关联SP_Main、EM_Main和OP_Main三张表,其中SP_Main需通过计算生成EBDP列;但EM_Main和OP_Main无对应列,必须为这两张表补充与EBDP同数据类型的列,才能保证UNION ALL正常执行。

原始代码如下:

SELECT
   ISNULL(CONVERT(money,[COLUMN1]), 0.00) 
         * COALESCE(CONVERT(MONEY,[COLUMN2]),CONVERT(MONEY,[COLUMN3]), 1.00) AS [EBDP],
   ISNULL(CONVERT(money,[COLUMN1]), 0.00) 
         * COALESCE(CONVERT(MONEY,[COLUMN2]),CONVERT(MONEY,[COLUMN3]), 1.00) 
      + [ActivityPrice] AS TotalPrice,
   convert(money,[COLUMN4]) AS ActivityPrice
FROM [SP_Main] e

UNION ALL

SELECT 
    [COLUMN WILL NEED TO BE CREATED FOR HERE]
    ISNULL(CONVERT(money,[COLUMN5]), 0.00) AS [TotalPrice],
    ISNULL(CONVERT(money,[COLUMN6]), 0.00) AS [ActivityPrice]
FROM EM_Main

UNION ALL 

SELECT 
    [COLUMN WILL NEED TO BE CREATED FOR HERE]
    ISNULL(CONVERT(money,[COLUMN5]), 0.00) AS [TotalPrice],
    ISNULL(CONVERT(money,[COLUMN6]), 0.00) AS [ActivityPrice]
FROM OP_Main

修正后的代码

EBDP为money类型,给EM_Main和OP_Main的查询补充同类型的EBDP列(可根据业务需求设置默认值,这里以0.00为例),同时保证列顺序与第一个子查询完全一致:

SELECT
   ISNULL(CONVERT(money,[COLUMN1]), 0.00) 
         * COALESCE(CONVERT(MONEY,[COLUMN2]),CONVERT(MONEY,[COLUMN3]), 1.00) AS [EBDP],
   ISNULL(CONVERT(money,[COLUMN1]), 0.00) 
         * COALESCE(CONVERT(MONEY,[COLUMN2]),CONVERT(MONEY,[COLUMN3]), 1.00) 
      + [ActivityPrice] AS TotalPrice,
   CONVERT(money,[COLUMN4]) AS ActivityPrice
FROM [SP_Main] e

UNION ALL

SELECT 
    CONVERT(money, 0.00) AS [EBDP], -- 补充同类型的EBDP列,默认值设为0.00
    ISNULL(CONVERT(money,[COLUMN5]), 0.00) AS [TotalPrice],
    ISNULL(CONVERT(money,[COLUMN6]), 0.00) AS [ActivityPrice]
FROM EM_Main

UNION ALL 

SELECT 
    CONVERT(money, 0.00) AS [EBDP], -- 同样补充EBDP列
    ISNULL(CONVERT(money,[COLUMN5]), 0.00) AS [TotalPrice],
    ISNULL(CONVERT(money,[COLUMN6]), 0.00) AS [ActivityPrice]
FROM OP_Main

关键说明

  • UNION ALL要求所有子查询的列数一致、对应列的数据类型兼容,用CONVERT(money, 0.00)明确指定类型,避免隐式转换引发的问题。
  • 如果业务逻辑中EM_Main和OP_Main的EBDP应为空值,可改为CONVERT(money, NULL) AS [EBDP],确保数据类型匹配。

内容的提问来源于stack exchange,提问作者EAsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:07:39