Sql 如何使用coalesce和pivot

Sql 如何使用coalesce和pivot,sql,oracle,pivot,coalesce,Sql,Oracle,Pivot,Coalesce,您好,我正在尝试将coalesce与Pivot结合使用,这样我就可以用零替换空值。以下是我所拥有的: SELECT * FROM ( SELECT MovieTitle,AwardResultDesc, COALESCE(COUNT(p.AwardResultID),'0') AS T FROM tblMovie t1 INNER JOIN tblAwardDetail p ON p.MovieID = t1.MovieID

您好,我正在尝试将coalesce与Pivot结合使用,这样我就可以用零替换空值。以下是我所拥有的:

     SELECT * FROM ( SELECT MovieTitle,AwardResultDesc, COALESCE(COUNT(p.AwardResultID),'0') AS T
     FROM tblMovie t1
            INNER JOIN tblAwardDetail p
              ON p.MovieID = t1.MovieID
            INNER JOIN tblAwardResult c
              ON c.AwardResultID = p.AwardResultID
    GROUP BY MovieTitle, AwardResultDesc,p.AwardResultID)

    PIVOT
    (
        max(T) FOR AwardResultDesc IN ('Won' AS "Won",'Nominated' AS "Nominated")
    ) 
    ORDER BY MovieTitle;

由于某种原因,我的Pivot似乎忽略了我的合并,有什么建议吗?

就其性质而言,Pivot操作涉及聚合函数,因此无需预聚合数据,但是,您确实需要确保正在透视的数据足够完整。在这里,外部连接到
tblMovie
可确保返回每部电影,无论其是否有任何奖励详细信息。如果您不想返回既未获得提名也未获得提名的电影的计数,请使用内部联接代替外部联接:

WITH dta AS (
 SELECT MovieTitle
      , AwardResultDesc
   FROM tblAwardResult ar
   JOIN tblAwardDetail ad
     ON ad.AwardResultID = ar.AwardResultID
  RIGHT JOIN tblMovie m
     ON m.MovieID = ad.MovieID
)
 SELECT *
   FROM dta
   PIVOT( count(*)
     FOR AwardResultDesc IN( 'Won' AS "Won"
                           , 'Nominated' AS "Nominated" ) )
  ORDER BY MovieTitle;

你正在使用哪个数据库?也许你需要一个左连接到P而不是内部连接。。。所有电影都有获奖细节吗?同样计数返回数值,合并返回文本或者隐式转换由于某种原因失败?尝试使用0周围的单引号。并在p.awardResultID
上删除分组。。。按您试图聚合的内容分组似乎不正确。最后
IN('Won'作为“Won”,'namified'作为“namified”)` IN语句中的别名似乎不正确。删除别名?@scaisEdge我正在使用oracle,现在我得到了正确的输出,但是空值是空的,谢谢xQbert,我会尝试一下这样做。我以前在pivot中没有别名,但仍然有相同的问题。我要做的第一件事是确保您的内部查询正常工作,该查询是否返回您期望的数据?Coalesce不起作用,因为count始终是0到x的数字,因此从不为null。。。因此,联合在这里似乎毫无用处。我不明白你怎么会得到空值。。。。DUH把凝聚点放在枢轴上,而不是内部选择
coalesce(max(t),0)
而不是在select上。哇,非常感谢这个查询最终成功了。虽然我永远不会不使用coalesce,但我仍然有点困惑没有它它是如何工作的。再次感谢。