2011-02-08 6 views
0

hy! 私は2つのテーブルを持っていて、それぞれ私はカラムの日付があります、私は3つのテーブルから取得したいカラムの日付を持つすべての2つのテーブルの情報を持つ単一のテーブルを作成する必要がありますが、同じ列に 次のコードは、しかしdidn`tの仕事SQLの問題:1つの列が同じ

CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = 
     CASE 
      WHEN EXISTS(SELECT Fa.DataEmitere FROM Fa AS e 
       WHERE e.ID = @id) 
       THEN 'Fa'   
      WHEN EXISTS(SELECT Pay.Data FROM Pay AS bec 
       WHERE bec.ID = @id) 
       THEN 'Pay'    
     END; 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 
+1

'sql'は汎用タグで、' sql-server'を意味しますか? – Fionnuala

+0

あなたがここで何をしようとしているのかは完全にはっきりしていません。 SET @ActivityDate = 'FA'の部分は明らかに間違っています。いくつかのサンプルデータと期待される結果(複数の例が望ましい)を投稿できますか? –

+0

ここにデカルト結合があります。答えは 'FROM Fa、Pay'で取り上げられていないようです –

答えて

0

ただ、データベース名とフィールドの前に付けます。私はあなたが実際に意味する日付をActivityDateと仮定しようとしています。このフィールドを使用してSELECT/INSERTを行う場合は、FaまたはPayという接頭辞を付ける必要がありますので、Fa.ActivityDateまたはPay.ActivityDateとなります。

これがフィールドでない場合は、さらに情報が必要です。

0

以下のようにテーブル名を指定して、列を使用します。 -

CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = Fa.ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = 
     CASE 
      WHEN EXISTS(SELECT Fa.DataEmitere FROM Fa AS e 
       WHERE e.ID = @id) 
       THEN 'Fa'   
      WHEN EXISTS(SELECT Pay.Data FROM Pay AS bec 
       WHERE bec.ID = @id) 
       THEN 'Pay'    
     END; 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 
0

ここで中央部分を参照してください:

基本的に
CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = ISNULL(
     (SELECT top 1 Fa.DataEmitere FROM Fa AS e WHERE e.ID = @id), 
     (SELECT top 1 Pay.Data FROM Pay AS bec WHERE bec.ID = @id)) 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 

、代わりにテストのデータはちょうど得るために存在するかどうかを確認しフィールド名は、直接データを取得します。

関連する問題