我正在尝试在LINQ中执行此操作。 你能帮助我做这个吗? 有一些工具可以帮助我进行这种转换吗?
SELECT
CODIGO_DEPENDENCIA,
SUM(COALESCE(LOCAL_MOVEL, 0)) AS LOCAL_MOVEL,
SUM(COALESCE(LOCAL_FIXO, 0)) AS LOCAL_FIXO,
SUM(COALESCE(DDD_MOVEL, 0)) AS DDD_MOVEL,
SUM(COALESCE(DDD_FIXO, 0)) AS DDD_FIXO,
SUM(COALESCE(EXTERNA_INTERNACIONAL, 0)) AS EXTERNA_INTERNACIONAL
FROM (
SELECT
CODIGO_DEPENDENCIA,
CASE WHEN TIPO = 'SELM' THEN SUM(VALOR) END AS LOCAL_MOVEL,
CASE WHEN TIPO = 'SELF' THEN SUM(VALOR) END AS LOCAL_FIXO,
CASE WHEN TIPO = 'SENM' THEN SUM(VALOR) END AS DDD_MOVEL,
CASE WHEN TIPO = 'SENF' THEN SUM(VALOR) END AS DDD_FIXO,
CASE WHEN TIPO = 'SEI' THEN SUM(VALOR) END AS EXTERNA_INTERNACIONAL
FROM CAD_BILHETES
WHERE ID_PRODUTO IS NULL
AND ID_COMPETENCIA = 60
AND CODIGO_DEPENDENCIA IN (14, 160)
AND TIPO IN ('SEI', 'SELM', 'SENF', 'SELF', 'SENM')
AND VALOR <> 0
GROUP BY TIPO,CODIGO_DEPENDENCIA
) TAB
GROUP BY CODIGO_DEPENDENCIA
答案 0 :(得分:0)
显然未经测试。此外,不确定是否需要null
测试或他们将如何通过SQL翻译做出反应。最好将第一个查询更改为在不匹配时返回0,然后只对结果求和,但我不确定列的数据类型。
var tab = from cb in CAD_BILHETES
where cb.ID_PRODUTO == null && cb.ID_COMPETENCIA == 60 && (new[] { 14, 160 }).Contains(cb.CODIGO_DEPENDENCIA) &&
(new[] { "SEI", "SELM", "SENF", "SELF", "SENM" }).Contains(cb.TIPO) && cb.VALOR != 0
group cb by new { cb.TIPO, cb.CODIGO_DEPENDENCIA } into cbg
select new { cbg.Key.CODIGO_DEPENDENCIA,
LOCAL_MOVEL = (cbg.Key.TIPO == "SELM" ? cbg.SUM(cb => cb.VALOR) : null),
LOCAL_FIXO = (cbg.Key.TIPO == "SELF" ? cbg.SUM(cb => cb.VALOR) : null),
DDD_MOVEL = (cbg.Key.TIPO == "SENM" ? cbg.SUM(cb => cb.VALOR) : null),
DDD_FIXO = (cbg.Key.TIPO == "SENF" ? cbg.SUM(cb => cb.VALOR) : null),
EXTERNA_INTERNACIONAL = (cbg.Key.TIPO == "SEI" ? cbg.SUM(cb => cb.VALOR) : null),
};
var ans = from cb in tab
group cb by cb.CODIGO_DEPENDENCIA into cbg
select new {
CODIGO_DEPENDENCIA = cbg.Key,
LOCAL_MOVEL = cbg.Sum(cb => cb.LOCAL_MOVEL == null ? 0 : cb.LOCAL_MOVEL),
LOCAL_FIXO = cbg.Sum(cb => cb.LOCAL_FIXO == null ? 0 : cb.LOCAL_FIXO),
DDD_MOVEL = cbg.Sum(cb => cb.DDD_MOVEL == null ? 0 : cb.DDD_MOVEL),
DDD_FIXO = cbg.Sum(cb => cb.DDD_FIXO == null ? 0 : cb.DDD_FIXO),
EXTERNA_INTERNACIONAL = cbg.Sum(cb => cb.EXTERNA_INTERNACIONAL == null ? 0 : cb.EXTERNA_INTERNACIONAL)
};