2011-12-06 1 views
0

をバインドすることはできませんこれは、MS SQLで動作します:表フィールドは

SELECT  TOP (100) PERCENT SUM(P.bedrag) AS ex 
FROM   dbo.verkopen AS P INNER JOIN 
         (SELECT DISTINCT dbo.verkopen.ino 
         FROM   dbo.verkopen INNER JOIN 
               dbo.doss ON dbo.verkopen.ino =   dbo.doss.ino   INNER  JOIN 
               dbo.vdagbk ON dbo.verkopen.ino = dbo.vdagbk.ino 
         WHERE  (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520')) AS C ON C.ino = P.ino 

私は私の結果に複製一部の行があったように、そのようにそれをしなければなりませんでした。

しかし、私はそれでこのような何かをしたい:

SELECT  TOP (100) PERCENT doss.dosno, doss.dosnm, SUM(P.bedrag) AS TotBedraggefactureerd, SUM(P.betaald) AS TotBetaald, SUM(P.totincl) AS TotIncl, 
        SUM(vdagbk.beginsaldo) AS totbeginsaldoontvangen, SUM(vdagbk.eindsaldo) AS toteindsaldoontvangen, 
        SUM(CASE vdagbk.reden WHEN 'H' THEN vdagbk.bedrag END) AS ontvangenhonoraria, SUM(CASE vdagbk.reden WHEN 'P' THEN vdagbk.bedrag END) 
        AS ontvangenprov, SUM(CASE vdagbk.reden WHEN 'A' THEN vdagbk.bedrag END) AS dagboekA, SUM(CASE vdagbk.reden WHEN 'G' THEN vdagbk.bedrag END) 
        AS dagboekG, SUM(CASE vdagbk.reden WHEN 'E' THEN vdagbk.bedrag END) AS dagboekE 
FROM   dbo.verkopen AS P INNER JOIN 
         (SELECT DISTINCT dbo.verkopen.ino 
         FROM   dbo.verkopen INNER JOIN 
               dbo.doss ON dbo.verkopen.ino = dbo.doss.ino INNER JOIN 
               dbo.vdagbk ON dbo.verkopen.ino = dbo.vdagbk.ino 
         WHERE  (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520')) AS C ON C.ino = P.ino 
GROUP BY doss.dosno, doss.dosnm 
ORDER BY doss.dosno 

私はそれがすべての今台無しにされて知っています。私は少しSQLを行うことができますが、これは私の頭の上に並べ替えるビットです。

私はそれが.inoのみを含んでいることは知っていますが、今どこにクエリを置いていますか?

私はこれでした:

`SELECT  TOP (100) PERCENT doss.dosno, doss.dosnm, SUM(verkopen.bedrag)/2 AS TotBedraggefactureerd, SUM(verkopen.betaald) AS TotBetaald, SUM(verkopen.totincl) 
        AS TotIncl, SUM(vdagbk.beginsaldo) AS totbeginsaldoontvangen, SUM(vdagbk.eindsaldo) AS toteindsaldoontvangen, 
        SUM(CASE vdagbk.reden WHEN 'H' THEN vdagbk.bedrag END) AS ontvangenhonoraria, SUM(CASE vdagbk.reden WHEN 'P' THEN vdagbk.bedrag END) 
        AS ontvangenprov, SUM(CASE vdagbk.reden WHEN 'A' THEN vdagbk.bedrag END) AS dagboekA, SUM(CASE vdagbk.reden WHEN 'G' THEN vdagbk.bedrag END) 
        AS dagboekG, SUM(CASE vdagbk.reden WHEN 'E' THEN vdagbk.bedrag END) AS dagboekE 
FROM   verkopen INNER JOIN 
        doss ON verkopen.ino = doss.ino INNER JOIN 
        vdagbk ON verkopen.ino = vdagbk.ino 
WHERE  (dbo.doss.uitvoerder LIKE 'LL') AND (dbo.doss.dosno LIKE '101520') GROUP BY doss.dosno, doss.dosnm 
ORDER BY doss.dosno 
` 

をしかし、それはいくつかのケースでは二重の結果を返しました。

+0

役に立つかもしれないいくつかの興味深い点:まず、 "Top(100)Percent"ビットを取り除くことができます。それはあなたのコードを複雑にし、何もしません。第二に、SQL Serverはいくつかの改行を恐れることはありません。したがって、totbeginsaldoontvangenとTotBedraggefactureerdとその他すべてを別々の行に置くことで、コードを読みやすくすることができます。 – PowerUser

答えて

0

SELECTには、別名PCのみが用意されています。

dossおよびvdagbkエイリアスは、派生テーブルの内部にあります。派生テーブルは、とにかくdbo.verkopen.inoを返します。

私が派生テーブルを削除し、ちょうど

0

あなたinoがはい、主キーで直接参加を検討したいですか?その場合、いくつかの具体的な例を見つけることによって重複を調査する必要があります。あなたの3つのソーステーブルでそれらのinoの値を探します。これらのテーブルの少なくとも1つに重複値がある可能性があります。

+0

はい私は2番目のクエリを使用しているときに倍数があることを知っています。最初のクエリを使用して、それらを何らかの形で「削除」しました。だから私は3番目のクエリにそのクエリメソッドを実装したいと思います。しかし、私はそれをどうやって行うのか分かりません。 –

+0

'Select Distinct'はおそらくトリックを行うでしょうが、まず最初にダブルスがある理由を調べることを強くお勧めします。何とか処理する必要があるソースデータに複雑さがあるかもしれません。 – PowerUser

関連する問題