2017-06-27 11 views
-1

私はこれをLINQで実行しようとしています。 皆さん、私にこれを手伝ってもらえますか? この変換に役立つツールがありますか?SQLから集約関数を使用した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

LINQ自体は非常に強力です。あなたの現在の進歩はどのように見えますか? – Scott

+0

試したコードを含めて、どこに障害があるのか​​を説明してください。それはあなたに[linqパッドが役に立つかもしれない](http://www.linqpad.net/)と言われています。 – Fabulous

+0

私はこのコードをSQLのlinqにキャストしようとしています。 私の進捗状況が0より小さい – user2570306

答えて

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) 
     }; 
+0

ありがとう、私の問題を解決するだけです。 – user2570306

関連する問題