小编Lef*_*fty的帖子

SQL UNION - 不合逻辑的结果

我在SQL中使用UNION有一个有趣的问题.

我的声明是这样的形式:

with tab as (
(select FldA, FldB From  Table1A inner join Table1B on Field1A=Field1B)
UNION
(select FldA, FldB From  Table2A inner join Table2B on Field2A=Field2B)
)
select * from tab
where FldA="XYZ"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我只返回1行 - 这是不正确的.我只是通过评论UNION和第二个Select语句来验证它是不正确的:

with tab as (
(select FldA, FldB From  Table1A inner join Table1B on Field1A=Field1B)
--UNION
--(select FldA, FldB From  Table2A inner join Table2B on Field2A=Field2B)
)
select * from tab
where FldA="XYZ"
Run Code Online (Sandbox Code Playgroud)

如果我运行这个版本,我得到行返回!我假设我做了一些愚蠢的事 - 但我无法想象.

sql sql-server union select

2
推荐指数
1
解决办法
94
查看次数

SQL - 不同的WHERE子句依赖于变量

我正在使用变量让我的SELECT以2种不同的"模式"运行:

DECLARE @Mode as Varchar(1) = 'A'

SELECT 
    CASE 
       WHEN @Mode = 'A' 
          THEN FieldABC * 2   
       ELSE FieldABC * 3   
    END AS FieldABC,
    CASE 
       WHEN @Mode = 'A' 
          THEN FieldDEF   
       ELSE FieldGHI   
    END AS FieldJKL

WHERE 
    FieldABC BETWEEN 0 AND 100
Run Code Online (Sandbox Code Playgroud)

当我想运行SELECT的"B"版本时,我只需要更改变量值.一切正常.

我现在想要更改WHERE子句,因此它也依赖于变量:

IF @Mode = 'A' THEN 
   WHERE FieldABC > 0 
ELSE 
   WHERE FieldABC < 0
END IF 
Run Code Online (Sandbox Code Playgroud)

除此之外,这种语法在SQL中完全是无意义的!

如何WHERE根据相同的变量实现我的子句的两种不同风格- 或者SELECT在两种不同模式之间切换的其他简单方法?

sql sql-server

2
推荐指数
1
解决办法
117
查看次数

Excel VBA Range对象作为参数

我在Excel中编写了这个非常短的VBA宏,它将2个Range对象传递给我自己的Function.这是整个代码:

Sub Cmp()

Dim OneMatch As Boolean
Dim NoMatches As Integer
Dim OneCell, TwoCell As Range

For Each OneCell In Range("X030Pols").Cells
   OneMatch = False: NoMatches = 0

   For Each TwoCell In Range("X206Pols").Cells

           TwoCell.Offset(0, 23).Value = 0

   Next

   For Each TwoCell In Range("X206Pols")
       If TwoCell.Offset(0, 22).Value = "" Then
           TwoCell.Offset(0, 23).Value = PolComp(OneCell, TwoCell)
           If TwoCell.Offset(0, 23).Value > 0 Then
               NoMatches = NoMatches + 1
           End If
       End If
   Next

    If NoMatches = 1 Then
       TwoCell.Offset(0, 22).Value = OneCell.Offset(0, -1).Value
       OneCell.Offset(0, …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

0
推荐指数
1
解决办法
467
查看次数

多个SQL WITH子句 - 为什么不呢?

我有2个单独的查询.

查询1:

With A as (Select P,Q,R from X union all Select P,Q,R from Y)
Insert into File1
Select * from A
Run Code Online (Sandbox Code Playgroud)

查询2:

With B as (Select S,T,U from Z)
Insert into File2
Select * from B
Run Code Online (Sandbox Code Playgroud)

我意识到,从逻辑上讲,我总是需要一起生成File1和File2,所以我决定将2个查询合并为一个存储过程.但是,当我尝试这样做时,我遇到了这个问题,它只能在查询中有一个WITH子句.

所以,我在SO中发现了一些问题,其中人们解释说你只是使用逗号并且有一个单独的WITH子句(尽管没有WITH)但是这对我的例子来说不适用于任何形式.

这不是问题 - 我很容易通过使用临时表等解决它.但我真的很感兴趣为什么我不能在同一个Proc中有两个完全不相关的WITH子句?

有人可以解释一下吗?

sql t-sql sql-server

-1
推荐指数
1
解决办法
129
查看次数

标签 统计

sql ×3

sql-server ×3

excel ×1

excel-vba ×1

select ×1

t-sql ×1

union ×1

vba ×1