首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL嵌套IF逻辑

TSQL嵌套IF逻辑
EN

Stack Overflow用户
提问于 2014-06-09 22:24:32
回答 1查看 85关注 0票数 0

我有一个查询,我正在使用它将数据拉到我的页面上。目前,您可以在my report上选择一个“位置”并显示该位置的数据。我想添加一个“全局”选项,这样当它被选中时,查询将返回所有数据。

这是我按位置查询数据时的当前工作SP:

代码语言:javascript
复制
IF (@action = 'segment')

    BEGIN
        SELECT   B.[segmentName],
                 count(A.[segmentID]) AS total,
                 A.[meetingID],
                 C.[center]
        FROM     Focus_Meetings_Segments AS A
                 INNER JOIN
                 Focus_Segments AS B
                 ON A.[segmentID] = B.[id]
                 JOIN Focus_Meetings as C
                 ON C.[id] = A.[meetingID]
        WHERE C.[center] = @location
        GROUP BY B.[segmentName], A.[meetingID], C.[center]
        ORDER BY total DESC
        FOR      XML PATH ('segment'), TYPE, ELEMENTS, ROOT ('root');
    END
ELSE

下面是针对所有数据的查询结果:

代码语言:javascript
复制
IF (@action = 'segment')

    BEGIN
        SELECT   B.[segmentName],
                 count(A.[segmentID]) AS total
        FROM     Focus_Meetings_Segments AS A
                 INNER JOIN
                 Focus_Segments AS B
                 ON A.[segmentID] = B.[id]
        GROUP BY B.[segmentName], A.[segmentID]
        ORDER BY total DESC
        FOR      XML PATH ('segment'), TYPE, ELEMENTS, ROOT ('root');
    END
ELSE

有没有一种方法可以内联case逻辑,或者像下面这样嵌套的if语句?

代码语言:javascript
复制
IF (@action = 'segment')
    IF (@location = 'global')
EN

回答 1

Stack Overflow用户

发布于 2014-06-09 22:30:50

您不需要两个不同的语句。只需更改Where子句,使其基于@location的值为条件

代码语言:javascript
复制
 Where C.[center] = coalesce(@location, C.[center])

然后,当你想要它们的时候,只需要传递一个null。

注意:如果连接到B有时会失败,请将其设置为外部连接。

代码语言:javascript
复制
    SELECT B.[segmentName],
       count(A.[segmentID]) AS total,
        A.[meetingID],
         C.[center]
    FROM  Focus_Meetings_Segments AS A
       JOIN Focus_Segments B
          ON A.[segmentID] = B.[id]
       Left JOIN Focus_Meetings as C
          ON C.[id] = A.[meetingID]
             And C.[center] = coalesce(@location, C.[center])
    GROUP BY B.[segmentName], A.[meetingID], C.[center]
    ORDER BY total DESC
    FOR  XML PATH ('segment'), TYPE, ELEMENTS, ROOT ('root');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24122362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档