0

こんにちは私はここで少し立ち往生しています。「緑」、「黄」、「赤」という契約の3つのラベルを作成しようとしています。ラベルは、式contractdate-curdate()によって識別されます。-90日以上離れている場合は緑色。-黄色-=終了日が31日から89日の間の場合-終了日が30日以下の場合は赤

ラベルの列を作成して各契約をそれぞれの色で配置する方法、または識別子を使用して色ごとに3つの列を作成する方法が必要ですか?

これらは私が行ったいくつかのクエリですが、運がありません。

select 
    contractname, contractenddate
from
    contract
where
    contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 30 DAY)
        and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 60 DAY)
and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 90 DAY)

select contractname, date_sub(contractenddate,interval 0-30 day)as Red,
date_sub(contractenddate,interval 31-89 day)as Yellow,
date_sub(contractenddate,interval 90 day)as Green
 from contract

私はこれらが間違っていることを知っていますが、おそらく誰かがこれらに基づいて構築するのを助けることができますか?それは大いに感謝されるでしょう!!! 最後の注意点は、データベース構造を変更できないことです。使用できるのはselectステートメントのみです。

よろしくお願いします!

4

1 に答える 1

1

この作品のようなもの?DATEDIFFの使用を検討してくださいCASE

SELECT contractname, 
  contractenddate,
  CASE
      WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'Red'
      WHEN DATEDIFF(CurDate(),contractenddate) < 90 THEN 'Yellow'
      ELSE 'Green'
  END Label
FROM Contract

これがSQLフィドルです。

また、日数が必要な場合は、SQLステートメントに次を追加できます。

DATEDIFF(CurDate(),contractenddate) DaysAway

または、列として赤、黄、緑が必要な場合は、非常によく似たものが機能します。

SELECT contractname, 
  contractenddate,
  CASE WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'X' ELSE '' END 'Red',
  CASE WHEN DATEDIFF(CurDate(),contractenddate) < 90 AND DATEDIFF(CurDate(),contractenddate) > 30 THEN 'X' ELSE '' END 'Yellow',
  CASE WHEN DATEDIFF(CurDate(),contractenddate) >= 90 THEN 'X' ELSE '' END 'Green'
FROM Contract

どちらを持っているかを示すために「X」を付けました。あなたが探していたものがはっきりしていませんでした。

もっとフィドル

幸運を。

于 2013-01-31T20:15:04.650 に答える