0

私はテーブルコストカテゴリを持っています:

CREATE TABLE [dbo].[CostCategory](
[ID_CostCategory] [int] NOT NULL,
[Name] [varchar](150) NOT NULL,
[Plan] [money] NOT NULL,
[Realization] [money] NULL,
)
go

コストが定義された別のテーブルがあります。

CREATE TABLE [dbo].[Cost](
[ID_Cost] [int] NOT NULL,
[Name] [varchar](50) NULL,
[ID_CostCategory] [int] NULL,
[ID_Department] [int] NULL,
[ID_Project] [int] NULL,
[Value] [money] NULL,
)
go 

私がしたいことは、Cost テーブル (ID_CostCategory に従って) の値を合計し、Cost Category テーブルの Realization 列に入れることです。したがって、各 ID_CostCategory は、(ID_CostCategory ごとに) コスト テーブルからのコストの合計を自動的に提示します。

コスト カテゴリ テーブルのスクリプトを変更してそれを達成するにはどうすればよいですか? おそらくそれはロケット科学ではありませんが、私はSQLに本当に慣れていません。


わかった。追加するのを忘れていたもう1つのこと...構造はある意味で見えます:
コスト>コストカテゴリ>部門>プロジェクト

現在、コスト テーブルから簡単にデータを取得し、それをコスト カテゴリ テーブルに表示できます。ただし、Cost テーブルには次のようなデータが含まれます。

ID_Cost Name    ID_CostCategory ID_Department   ID_Project  Value
1   fv 001  1   1   1   100
2   fv 002  2   1   1   500
3   fv 003  2   2   1   300
4   fv 004  3   2   2   150
5   fv 005  3   3   2   30
6   fv 006  4   3   2   15

ID_Department、Name、Plan、

だから今、私がやりたいのは、Cost テーブル (ID_CostCategory と ID_Department に従って) の値を合計し、Department テーブルに Realization 列として入れることです。したがって、各 ID_Department は、Cost テーブル (ID_CostCategory および ID_Department ごと) からのコストの合計を自動的に提示します。

明確であることを願っています(後でテーブルプロジェクトで行う必要がありますが、取得したら簡単になります)

4

2 に答える 2

0

これを試して

--create table without realization column
CREATE TABLE [dbo].[CostCategory](
[ID_CostCategory] [int] NOT NULL,
[Name] [varchar](150) NOT NULL,
[Plan] [money] NOT NULL
) go

CREATE TABLE [dbo].[Cost](
[ID_Cost] [int] NOT NULL,
[Name] [varchar](50) NULL,
[ID_CostCategory] [int] NULL,
[ID_Department] [int] NULL,
[ID_Project] [int] NULL,
[Value] [money] NULL,

) go 

コスト列の合計を計算する UDF を作成します。

CREATE FUNCTION [dbo].[CalculateRealization](@Id INT) 
RETURNS money
AS 
BEGIN
  DECLARE @cost money

  SELECT @cost = SUM(Value)
  FROM [dbo].[Cost]
  WHERE [ID_CostCategory] = @ID

  return @cost
END

次に、CostCategory テーブルを変更して、計算列を追加します。

ALTER TABLE [dbo].[CostCategory]
   ADD [Realization] AS dbo.CalculateRealization(ID_CostCategory);

Costcategory から Realization を選択できるようになりました

SELECT ID_CostCategory, Realization
FROM [dbo].[CostCategory]

以下のコメントへの回答:

別の UDF を作成する

CREATE FUNCTION [dbo].[CheckValue](@Id INT, @value Money) 
RETURNS INT
AS 
BEGIN
  DECLARE @flg INT
  SELECT @flg = CASE WHEN [Plan] >= @value THEN 1 ELSE 0 END
  FROM [dbo].[CostCategory]
  WHERE [ID_CostCategory] = @ID

  return @flg;
END

次に、コスト テーブルに制約を追加します。

ALTER TABLE ALTER TABLE [dbo].[Cost]
  ADD CONSTRAINT CHK_VAL_PLAN_COSTCATG
    CHECK(dbo.CheckValue(ID_CostCategory, Value) = 1)
于 2013-09-11T19:21:23.730 に答える