0

データを失うことなく2つのテーブルを組み合わせる必要がある状況があります。2つのテーブルの構造は異なります。以下は私のテーブルの構造です

TABLE A 
ID_NO INT,
Ship_Date DATE,
Status varchar(10),
total decimal(12,2)

TABLE B
ID_NO INT,
Status varchar(10),
total decimal(12,2)

次のように、表Bにダミー列を含めてUNIONALLを使用してみました。

TABLE B
ID_NO INT,
'',
Status varchar(10),
total decimal(12,2)

しかし、結果セットでは、''の代わりにShip_Dateとして1900-01-01を取得します。これを排除する方法は?

4

3 に答える 3

5

空の文字列の代わりにNULL値を使用してください。Ship_Dateの結果を文字列として気にしない場合は、UNIONを別のselectステートメントでラップできます。

SELECT U._ID_NO, 
       CASE WHEN U.Ship_Date IS NULL 
               THEN ''
               ELSE CONVERT(NVARCHAR(50), U.Ship_Date,101) END AS Ship_Date,
       U.Status, 
       U.total 
FROM
(
  SELECT A.ID_NO, A.Ship_Date, A.Status, A.total 
  FROM TableA

  UNION ALL

  SELECT B.ID_NO, NULL AS Ship_Date, B.Status, B.total 
  FROM TableB
) AS U
于 2012-07-17T15:51:50.147 に答える
2

Ship_Datedateデータ型ですが、NULL代わりにダミーのプレースホルダーとして使用してみませんか?

TABLE B
ID_NO INT,
NULL,
Status varchar(10),
total decimal(12,2)
于 2012-07-17T15:51:28.280 に答える
2

1900-01-01その列タイプがDATETIMEであるために取得しています。「空」にしたい場合は、NULL代わりに使用します。''

試す:

select 
    ID_NO,
    case
        when Ship_Date is NULL then ''
       else Ship_Date
    end as Ship_Date,
    Status,
    total
from
(
    select
        ID_NO,
        Ship_Date,
        Status,
        total
    from
        table_a

    union all

    select
        ID_NO,
        NULL as Ship_Date,
        Status,
        total
    from
        table_b 
) combined
于 2012-07-17T15:51:28.090 に答える