使用同一查询中的子查询填充值

时间:2018-05-15 22:17:05

标签: sql-server tsql

希望我能正确解释这一点。

查询我加入几张桌子的情况。设置系统的方式,当填充一列时,另一列为空,反之亦然。这是我目前查询结果的样子:

onReceive

这就是我试图让它看起来像:

    CREATE TABLE mytable(
   mainID INTEGER  NOT NULL PRIMARY KEY 
  ,acctID VARCHAR(4) NOT NULL
  ,emailID INTEGER  NOT NULL
  ,type INTEGER  NOT NULL
  ,created DATE  NOT NULL
);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC123,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC124,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC125,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC126,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC127,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC127,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);

这里大概是我的尝试:我觉得我忽略了一些非常明显的东西,并且让它变得比以前更难......

id  date    pid pcid    lid
ABC123  1/1/2018    12345   XYZ 12345
ABC124  1/1/2018    12345   XYZ 12345
ABC125  1/1/2018    12345   XYZ 12345
ABC126  1/1/2018    12345   XYZ 12345
ABC127  1/1/2018    12345   XYZ 12345
ABC127  1/1/2018    12345   XYZ 12345
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ABC567  1/3/2018    789432  ZF1 789432
ABC567  1/3/2018    789432  ZF2 789432
ABC567  1/3/2018    789432  ZF3 789432
ABC567  1/3/2018    789432  ZF4 789432
ABC567  1/3/2018    789432  ZF5 789432
ABC567  1/3/2018    789432  ZF6 789432
ABC980  1/4/2018    8675309 QRXS    8675309
ABC980  1/4/2018    8675309 QRXS    8675309
ABC980  1/4/2018    8675309 QRXS    8675309

基本上,我试图填充PID,PCID,LID中缺少的列。当PCID存在时。在表B中,有3个Ids。如果填充了pcid,那么pid就不是等等。我想填充pid和pcid。

2 个答案:

答案 0 :(得分:0)

你的第一个问题是你告诉SQL列不能为NULL,但是你用NULL值填充行。 在您的CREATE TABLE表中,如果您需要它们来保存NULL值,那么最后3列不应该说NOT NULL。

你的第二个问题是你没有在你的问题中明确你从哪里得到值'XYZ',或者你的预期输出中的任何其他NULL值,你似乎填充了值无处。这些价值来自哪里? 当问题不包括所有线索时,很难回答。

答案 1 :(得分:0)

为了节省时间,我把我需要的列放到另一个表中,并从那里更新。

相关问题