我有这个问题:
SELECT
--DGC.Name
[GameChannel],
SUM([AdjustedGames] ) *100. / SUM(SUM([AdjustedGames])) OVER() [Percentage]
FROM #GameChannelResults1 GC
--LEFT OUTER JOIN [WarehouseMgmt].[DimGameChannel] DGC ON DGC.Name = GC.[GameChannel]
GROUP BY [GameChannel]--DGC.Name
但是当没有匹配时它会返回空结果(没有)。我想以某种方式将[WarehouseMgmt]中的所有值。[DimGameChannel] .Name作为GameChannel,如果没有匹配或结果为空,则为0表示百分比。我怎么能这样做?
答案 0 :(得分:2)
也许就这样,加入你的维度,就像你已经评论过一样。
SELECT
DGC.Name
ISNULL(SUM([AdjustedGames] ) *100. / SUM(SUM([AdjustedGames])) OVER(),0) [Percentage]
FROM [WarehouseMgmt].[DimGameChannel] DGC
LEFT JOIN #GameChannelResults1 GC ON DGC.Name = GC.[GameChannel]
GROUP BY DGC.Name
答案 1 :(得分:0)
如果您在问题中添加样本数据并提供预期输出,则总会有所帮助。 SO在此主题上有一个handy guide,您可能需要阅读。
此示例有三个通道。其中两个渠道有结果,一个没有。
<强>示例强>
-- Table vars are easy to share.
DECLARE @Channel TABLE
(
ChannelName VARCHAR(10)
)
;
DECLARE @GameResults TABLE
(
ChannelName VARCHAR(10),
AdjustedGames INT
)
;
-- There are three sample channels...
INSERT INTO @Channel
(
ChannelName
)
VALUES
('Channel A'),
('Channel B'),
('Channel C')
;
-- ... but only two contain results.
INSERT INTO @GameResults
(
ChannelName,
AdjustedGames
)
VALUES
('Channel A', 1),
('Channel A', 2),
('Channel B', 1),
('Channel B', 2)
;
<强>查询强>
此查询使用outer join返回@Channel
表中的每条记录以及@GameResults
表中的所有匹配记录。如果没有匹配的记录,则默认返回NULL。我已使用ISNULL将其替换为0。
-- Outer join example.
SELECT
c.ChannelName,
ISNULL(SUM(AdjustedGames), 0) AS AdjustedGames
FROM
@Channel AS c
LEFT OUTER JOIN @GameResults AS gr ON gr.ChannelName = c.ChannelName
GROUP BY
c.ChannelName
;
答案 2 :(得分:0)
这样的东西?
使用NULLIF
功能。
它的作用类似于CASE
,如果值为空,则返回null ...
NULLIF(Value,'')
然后,您可以使用ISNULL
将NULL
值替换为0
。
一起使用来调整你想要的逻辑......