我有一个查询,我正在使用它将数据拉到我的页面上。目前,您可以在my report上选择一个“位置”并显示该位置的数据。我想添加一个“全局”选项,这样当它被选中时,查询将返回所有数据。
这是我按位置查询数据时的当前工作SP:
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下面是针对所有数据的查询结果:
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语句?
IF (@action = 'segment')
IF (@location = 'global')发布于 2014-06-09 22:30:50
您不需要两个不同的语句。只需更改Where子句,使其基于@location的值为条件
Where C.[center] = coalesce(@location, C.[center])然后,当你想要它们的时候,只需要传递一个null。
注意:如果连接到B有时会失败,请将其设置为外部连接。
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');https://stackoverflow.com/questions/24122362
复制相似问题