2016-08-11 7 views
0

私は自分の要件のためにサブクエリをマージしたクエリを持っています。現在の値ではなくヌル値を返す列

ここでクエリはです。

select a.mkey, b.mkey RefMkey, a.doc_no, a.doc_date, 
      e.type_desc DocType, c.first_name + ' ' + c.last_name CurrentUser, 
     d.Type_desc Department, b.remarks, 
       (select f.type_desc from type_mst_a where f.Add_IInfo1 
       = b.NStatus_flag and f.type_code = 'S2') currentStatus 
      from inward_doc_tracking_hdr a 
     inner join inward_doc_tracking_trl b 
      on a.mkey = b.ref_mkey 
     inner join user_mst c 
      on c.mkey = b.CUser_Id 
     inner join type_mst_a d 
      on d.master_mkey = b.CDept_Id 
     inner join type_mst_a e 
      on e.master_mkey = a.doc_type 
     inner join type_mst_a f 
      on f.master_mkey = b.NStatus_flag 
where a.mkey = 227394 

が、何ここで起こっている、現在の値があるが、私はNULL

として取得しています更新

CREATE TABLE [dbo].[Inward_Doc_Tracking_Hdr](
[Mkey] [numeric](18, 0) NOT NULL, 
[FModule_ID] [char](1) NOT NULL, 
[Comp_Mkey] [numeric](4, 0) NOT NULL, 
[Branch_Mkey] [numeric](4, 0) NOT NULL, 
[Tran_Type] [varchar](6) NOT NULL, 
[Tran_Code] [numeric](8, 0) NOT NULL, 
[Tran_No] [numeric](4, 0) NOT NULL, 
[Department_ID] [varchar](4) NOT NULL, 
[User_Id] [numeric](10, 0) NULL, 
[Doc_Type] [numeric](10, 0) NULL, 
[Doc_No] [varchar](30) NULL, 
[Doc_Date] [datetime] NOT NULL, 
[Dispatch_By] [char](1) NOT NULL, 
[Status_Flag] [numeric](8, 0) NOT NULL, 
[FA_Year] [smallint] NOT NULL, 
[Party_Mkey] [numeric](10, 0) NULL, 
[To_Department] [numeric](10, 0) NULL, 
[To_User] [numeric](10, 0) NULL, 
[Inward_Amt] [numeric](18, 3) NULL, 
[Ref_No] [varchar](40) NULL, 
[Ref_date] [datetime] NULL, 
[U_DateTime] [datetime] NOT NULL, 
[LastAction_DateTime] [datetime] NULL, 
[Remarks] [varchar](255) NULL, 
[Delete_Flag] [char](1) NOT NULL, 
[Outward_Type] [char](1) NULL, 
[Doc_Department] [numeric](10, 0) NULL, 
[Party_Name] [varchar](80) NULL, 
[Delivered_By] [varchar](30) NULL, 
[Doc_Description] [varchar](50) NULL, 
[Last_Department] [numeric](10, 0) NULL, 
[Last_User] [numeric](10, 0) NULL, 
[Approved_Amount] [float] NULL, 
[Chq_No] [varchar](50) NULL, 
[Chq_dated] [datetime] NULL, 
[Chq_Bank] [varchar](40) NULL, 
[Chq_Amount] [float] NULL, 
[Vendor_MKey] [int] NULL, 
[Vendor_Comp_Mkey] [int] NULL, 
[Project_Mkey] [numeric](10, 0) NULL, 
[Program_mkey] [numeric](10, 0) NULL, 
[Payment_MKey] [int] NULL, 
[Due_Date] [datetime] NULL, 
[Updated_Remarks] [varchar](500) NULL, 
[Updated_Bill_no] [varchar](27) NULL, 
[Updated_Bill_Date] [datetime] NULL, 
[Updated_Bill_Amt] [float] NULL, 
[TotalDeductions] [float] NULL, 
[Broker_Mkey] [numeric](10, 0) NULL, 
[Customer_Mkey] [numeric](10, 0) NULL, 
[Payable_Amt] [float] NULL, 
[Balance_Amt] [float] NULL, 
[Req_Bill_Flag] [char](1) NULL, 
[Po_No] [varchar](50) NULL, 
[Receipt_No] [varchar](50) NULL, 
[Bill_No] [varchar](50) NULL, 
[Org_id] [varchar](10) NULL, 
[Site_Id] [varchar](50) NULL, 
[Site_Name] [varchar](150) NULL, 
[Cumulative_Amt] [numeric](18, 2) NULL, 
[Email_Id] [varchar](50) NULL, 
[Emp_Id] [varchar](6) NULL, 
[Disp_through] [varchar](50) NULL, 
[Disp_Through_Name] [varchar](100) NULL, 
[Last_To_User] [numeric](10, 0) NULL 

)[PRIMARY]

ショークエリON結果は

です。
+0

あなたは 'MKEY = 227394'用のテーブル定義とデータを追加することはできますか? –

+0

値があることをどう知っていますか?これらの値を提供する別のクエリがありますか? –

+0

@WalterMitty:はい、そのための別のクエリがあります。質問の質問を更新します – BNN

答えて

1
SELECT a.mkey, 
    b.mkey AS RefMkey, 
    a.doc_no, 
    a.doc_date, 
    e.type_desc AS DocType, 
    c.first_name + ' ' + c.last_name AS CurrentUser, 
    d.Type_desc AS Department, 
    b.remarks, 
    docType.type_desc AS currentStatus 
FROM inward_doc_tracking_hdr a 
INNER JOIN inward_doc_tracking_trl b 
    on a.mkey = b.ref_mkey 
INNER JOIN user_mst c 
    on c.mkey = b.CUser_Id 
INNER JOIN type_mst_a d 
    on d.master_mkey = b.CDept_Id 
INNER JOIN type_mst_a e 
    on e.master_mkey = a.doc_type 
LEFT JOIN 
    (
     SELECT type_desc, 
      Add_IInfo1 
     FROM type_mst_a 
     WHERE type_code = 'S2' 
    ) AS docType 
    ON docType.Add_IInfo1 = b.NStatus_flag 
WHERE a.mkey = 227394 
+0

ありがとうございました。 :) – BNN

0

あなたが代わりにサブクエリを、あなたはjoin自身と同じことを行うことができ、「F」

select f.type_desc from type_mst_a where f.Add_IInfo1 
       = b.NStatus_flag and f.type_code = 'S2' 
0

を定義していない:

select a.mkey, b.mkey RefMkey, a.doc_no, a.doc_date, 
     e.type_desc DocType, c.first_name + ' ' + c.last_name CurrentUser, 
     d.Type_desc Department, b.remarks, f.type_desc AS currentStatus 
from inward_doc_tracking_hdr a 
inner join inward_doc_tracking_trl b 
    on a.mkey = b.ref_mkey 
inner join user_mst c 
    on c.mkey = b.CUser_Id 
inner join type_mst_a d 
    on d.master_mkey = b.CDept_Id 
inner join type_mst_a e 
    on e.master_mkey = a.doc_type 
inner join type_mst_a f 
    on f.master_mkey = b.NStatus_flag AND f.Add_IInfo1 = b.NStatus_flag AND f.type_code = 'S2' 
where a.mkey = 227394 
+0

が行を返さないことを確認してください。 – BNN

+0

ここで何がうまくいかないかについてのご意見はありますか?私は左にも参加しようとしました。結果はありません。 – BNN

0

あなたのいずれかの列がnullの場合も、左を試してみてくださいまたはこのような完全な外部結合

select a.mkey, b.mkey RefMkey, a.doc_no, a.doc_date, 
      e.type_desc DocType, c.first_name + ' ' + c.last_name CurrentUser, 
     d.Type_desc Department, b.remarks, 
       (select f.type_desc from type_mst_a where f.Add_IInfo1 
       = b.NStatus_flag and f.type_code = 'S2') currentStatus 
      from inward_doc_tracking_hdr a 
     left join inward_doc_tracking_trl b 
      on a.mkey = b.ref_mkey 
     left join user_mst c 
      on c.mkey = b.CUser_Id 
     left join type_mst_a d 
      on d.master_mkey = b.CDept_Id 
     left join type_mst_a e 
      on e.master_mkey = a.doc_type 
     left join type_mst_a f 
      on f.master_mkey = b.NStatus_flag 
where a.mkey = 227394 
+0

両方のジョインが私にNULLを与えます。 – BNN

+0

@stackジョインを1つずつ追加しようとすると、その後にジョインまたはサブクエリの問題が発生します。 –

0

内部SELECTは「相関サブクエリ」と呼ばれます。

NULLSがデータベースに格納されていない場合でも、相関サブクエリは結果にNULLSを生成できます。副照会に一致する行がない行がメイン照会にある場合、NULLSが結果に表示されます。

あなたはデータに何らかの刑事捜査をしなくてはなりません。これについて

0

何:のように書き換えることができ

select a.mkey, b.mkey RefMkey, a.doc_no, a.doc_date, 
    e.type_desc DocType, c.first_name + ' ' + c.last_name CurrentUser, 
    d.Type_desc Department, b.remarks, 
    (select type_desc from type_mst_a where Add_IInfo1 = b.NStatus_flag and type_code = 'S2') currentStatus 
from inward_doc_tracking_hdr a 
inner join inward_doc_tracking_trl b 
    on a.mkey = b.ref_mkey 
inner join user_mst c 
    on c.mkey = b.CUser_Id 
inner join type_mst_a d 
    on d.master_mkey = b.CDept_Id 
inner join type_mst_a e 
    on e.master_mkey = a.doc_type 
inner join type_mst_a f 
    on f.master_mkey = b.NStatus_flag 
where a.mkey = 227394 

select a.mkey, b.mkey RefMkey, a.doc_no, a.doc_date, 
    e.type_desc DocType, c.first_name + ' ' + c.last_name CurrentUser, 
    d.Type_desc Department, b.remarks, g.type_desc as currentStatus 
from inward_doc_tracking_hdr a 
inner join inward_doc_tracking_trl b 
    on a.mkey = b.ref_mkey 
inner join user_mst c 
    on c.mkey = b.CUser_Id 
inner join type_mst_a d 
    on d.master_mkey = b.CDept_Id 
inner join type_mst_a e 
    on e.master_mkey = a.doc_type 
inner join type_mst_a f 
    on f.master_mkey = b.NStatus_flag 
inner join type_mst_a g 
    on g.Add_IInfo1 = b.NStatus_flag and 
     g.type_code = 'S2' 
where a.mkey = 227394 
関連する問題