14

製品 ID と名前を含むテーブルと、特定の日付のこれらの製品の在庫を含む別のテーブルがあります。在庫Item1あり、在庫ありなど。これらをストアド プロシージャで表示して、カレンダーのように表示し、1 か月のすべての日付とセルで利用可能な在庫を表示しようとしています。これを示す最良の方法は何ですか?61-1-201482-1-2014

例えば:

Name  | 1-1-2014 | 2-1-2014 | 3-1-2014 | 4-1-2014
Item1 |     6    |     8    |          |    6
Item2 |          |     2    |     1    |

元のテーブル - 名前

 ID |   Name 
  1 |  Item1
  2 |  Item2

元のテーブル - Stockdates

 ID | NameID  | Stock |    Date 
  1 |    1    |   8   |  2-1-2014    
  2 |    2    |   2   |  4-1-2014 
4

2 に答える 2

2

ステップ 1 - ギャップを埋める (必要ない場合もあります)

在庫テーブルにすべての製品の毎日の在庫が含まれていない場合は、別の場所から月のすべての日付を取得する必要があります。再帰的な CTE を使用して生成できます (変数宣言は省略されます)。

with dates as
(
   select @startdate as [date]
   union ALL
   select   [date] + 1 
   from dates
   where    [date] < @enddate
)
select  @strDays = COALESCE(@strDays + ', ['+ convert(varchar(8), [date],112) + ']', '['+ convert(varchar(8), [date],112) + ']') 
from    dates;

好みの日付形式を使用できますが、すべてのクエリでそれを維持することが重要です。

ステップ 2 - データを通常の形式にします。一時テーブルに保存することを選択するか、CTE を再度使用して、この手順を手順 3 と組み合わせることができます。

dates(上から) products(full) と(left) を結合するとstock、次のようなテーブルが得られます。

date
product_id    
items

在庫がない製品と日付についてはisnull、0. を表示します。date列がvarchar上記の CTE と同じ形式に変換されていることを確認してください。

ステップ 3 - テーブル (ステップ 2 で取得) をdate動的クエリの列でピボットします。

詳細をお伝えすることはできますが、今はできません。別の応答でも同様のことがわかります。 異なる列に個別の値を分散させます。

于 2014-12-11T12:42:43.243 に答える