0

次のコードがあります。

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date)
  FROM t1 a
  LEFT JOIN t1 b ON a.accNumber=b.accNumber 
  LEFT JOIN t1 ON a.accountId = t2.accountId
  WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber
  GROUP BY a.accNumber, a.Rest, t2.Owner
  ORDER BY t2.Owner

5列目と4列目の日付を引いて6列目に入れたいのです(MIN(b.Date) - dateadd(day,1,MIN(a.Date)))が、LEFT JOINのため単純にうまくいきDATEDIFF(day, dateadd(day,1,MIN(a.Date)), MIN(b.Date))ません。

ここに画像の説明を入力

これがどのように見えるかです。現在のコードでは、最初の 5 列しか表示されません。6 列目も表示したい

ここに画像の説明を入力

DATEDIFF(day, 4, 5)これは、Selectステートメントに追加するとどのように見えるかです

4

2 に答える 2

0

ISNULLこの場合は、SQL Server の機能を使用する必要がNULLありますLEFT JOIN

あなたの質問から、あなたが何をしたいのかは明確ではありませんが、次のように使用できます:

ISNULL(MIN(a.Date), 0)

また

MIN(ISNULL(a.Date, 0))

参照: http://technet.microsoft.com/en-us/library/ms184325.aspx

于 2013-10-28T10:35:04.927 に答える
0

問題を完全に理解しているとは言えませんが、短期的には解決策を提供できます。これにより、開発を進めることができ、後で何が問題なのかを理解できます。

コメントが言うように、投稿されたクエリが正しく機能すると仮定すると、それをテーブルとして扱うことができます。

あなたのクエリは

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date)
  FROM t1 a
  LEFT JOIN t1 b ON a.accNumber=b.accNumber 
  LEFT JOIN t1 ON a.accountId = t2.accountId
  WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber
  GROUP BY a.accNumber, a.Rest, t2.Owner
  ORDER BY t2.Owner

列に名前を付けて、別の SELECT ステートメントでラップします。これらの線に沿った何かが機能するはずです。

SELECT Owner, accNumber, Rest, Good_name, Another_good_name, 
       Another_good_name - Good_name Yet_a_third_good_name
FROM
    (SELECT t2.Owner, a.accNumber, a.Rest, 
            dateadd(day,1,MIN(a.Date)) Good_name, MIN(b.Date) Another_good_name
     FROM t1 a
     LEFT JOIN t1 b ON a.accNumber=b.accNumber 
     LEFT JOIN t1 ON a.accountId = t2.accountId
     WHERE a.Date<b.Date 
       AND a.Rest<>0 
       AND a.accNumber=b.accNumber
     GROUP BY a.accNumber, a.Rest, t2.Owner
     ORDER BY t2.Owner) AS Good_table_name

別の方法は、最初のクエリからビューを作成し、ビューから選択することです。

あなたの例にはNULLがなく、言及していないので、NULLの扱い方を知っていると思います。

于 2013-10-28T10:39:37.700 に答える