在 SQL Server 中联合所有的替代方案

Posted

技术标签:

【中文标题】在 SQL Server 中联合所有的替代方案【英文标题】:Alternative to union all in SQL Server 【发布时间】:2021-01-04 08:31:19 【问题描述】:

我想在不使用 union all 的情况下编写以下查询。这两个查询的唯一区别是 'Event''Time1' 列:

【问题讨论】:

union allunion all 尝试不使用专门针对此的工具并期望获得相同的结果是不明智的。 为什么这甚至是一个问题。 union all不是达到他的目的吗? 我从上面的查询中得到了想要的结果,但是在上面查询的延续中我有类似的 10 union all,看起来很麻烦 您的联合逻辑正在生成新记录。工会是这项工作的正确工具。 不,但我认为问题在于您一直在使用错误的工具。您在两个 select 子句中使用相同的表(具有完全相同的 where 条件),我假设您根本不需要使用 union。但是,您应该使用case 来表示EventTime1 【参考方案1】:

你可以这样使用:

Select  L.id
,       L.StudentID
,       L.Name
,       L.Owner
,       O.Stage
,       O.probab
,       Multiplier.Event as Event
,       Multiplier.Time1
From    Lead L 
CROSS APPLY (
                VALUES  ('Lead', case when L.converted='true' and convert(varchar,L.ldate,23)<>convert(varchar,O.odate,23) then O.date else L.date end)
                ,       ('Contact Attempt', case when L.Attempted is null then O.Attempted else L.ContactAttempted end)
            ) AS Multiplier(Event, Time1)
left join Opp O
        ON O.LeadID=L.LeadID
left join Acc A 
        ON A.id=O.AccountId
left join zip Z 
        ON z.CODE = left(L.postalcode,5)
where (L.ldate is not null or o.NewAssigned is not null)

顺便说一句,你应该总是定义varchar的长度。

【讨论】:

非常感谢,此查询有效。我刚刚在所有连接之后添加了交叉应用条件

以上是关于在 SQL Server 中联合所有的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

创建 XML 文件时在 SQL 中联合

如何在MYSQL中联合多个表[重复]

sql注入中联合查询group_concat位置

SQL Server CE 的替代品?

如何在 SQL Server 中查找外键依赖项?

sql练习