Sql 在空查询结果中返回零
我有一个疑问:Sql 在空查询结果中返回零,sql,sql-server,Sql,Sql Server,我有一个疑问: 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] GRO
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
但如果没有匹配项,则返回空结果(无)。我想以某种方式将[WarehouseMagmt].[DimGameChannel]中的所有值命名为GameChannel,如果没有匹配项或结果为空,则将百分比命名为0。我该怎么做呢?也许这个,加入你的维度,就像你已经评论过的那样
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
也许这个,加入你的维度,就像你已经评论过的那样
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
如果您在问题中添加示例数据,并提供预期的输出,这总是有帮助的。关于这个话题,你可能想读一读 此示例有三个通道。其中两个通道有结果,一个没有 样本
-- 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)
;
查询
此查询使用返回@Channel
表中的每条记录以及@GameResults
表中的任何匹配记录。当没有匹配的记录时,默认情况下返回NULL。我曾经用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
;
如果您在问题中添加示例数据,并提供预期的输出,这总是有帮助的。关于这个话题,你可能想读一读 此示例有三个通道。其中两个通道有结果,一个没有 样本
-- 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)
;
查询
此查询使用返回@Channel
表中的每条记录以及@GameResults
表中的任何匹配记录。当没有匹配的记录时,默认情况下返回NULL。我曾经用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
;
像这样的
使用NULLIF
函数。
它的工作原理类似于CASE
,如果值为空,则返回null
NULLIF(Value,'')
然后可以使用ISNULL
将NULL
值替换为0
一起使用来调整所需的逻辑…类似的内容
使用NULLIF
函数。
它的工作原理类似于CASE
,如果值为空,则返回null
NULLIF(Value,'')
然后可以使用ISNULL
将NULL
值替换为0
一起使用可调整所需的逻辑…谢谢,这很有帮助。正确的JOIN和ISNULL是解决方案谢谢,这很有帮助。右JOIN和ISNULL是解决方案