【问题标题】:Declare table, insert into table, select distinct声明表,插入表,选择不同
【发布时间】:2019-09-11 21:05:32
【问题描述】:

我有一个表值函数,其中声明了多个表,最后将它们连接在一起以使用每个表中的数据创建最终表。我遇到了重复问题,因此我创建了一个新表@ORDERHEADER,因此选择不同的值,然后将其插入到表中,最终插入到最终表中。当我单独运行 select distinct 时,它会正确填充,但是当我使用 insert 运行它时,不会填充任何内容。

下面是我目前正在使用的代码(我保留了注释掉的行,以便您查看我尝试过的内容——在第一个“--LEFT OUTER JOIN”上方是我的工作代码)。

DECLARE @ORDERHEADER TABLE(
    [DIV_CD] [varchar](8) NULL,
    [SALES_ORD_NR] [varchar](8) NOT NULL,
    [CUST_EDP_ID] [decimal](28,0) NOT NULL,
    [OFFER_CD] [varchar] (8) NULL)

    INSERT INTO @ORDERHEADER
    SELECT DISTINCT(SV_OR_1000_ORDER_HEADER.SALES_ORD_NR), 
SV_OR_1000_ORDER_HEADER.DIV_CD, SV_OR_1000_ORDER_HEADER.CUST_EDP_ID, 
SV_OR_1000_ORDER_HEADER.OFFER_CD
    from SV_OR_1000_ORDER_HEADER
    --join @RETURNS r on SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = 
--r.SALES_ORD_NR
                --LEFT OUTER JOIN 
--OPENQUERY(CH1KNOWAPP,'SELECT DISTINCT SALES_ORD_NR FROM 
--EmailVPN..EB_RETURN_CONFIRMATION_NEW WITH(NOLOCK) WHERE 
--ORD_ITM_STA_LGCY_CD IN (''R'',''E'',''4'')') as RET_EMAILS on 
--RET_EMAILS.SALES_ORD_NR COLLATE SQL_Latin1_General_CP1_CI_AS = 
--SV_OR_1000_ORDER_HEADER.SALES_ORD_NR
    --join @RETURNS r on SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = 
--r.SALES_ORD_NR
     --join SV_MACORD_RETURNS on 
--SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = SV_MACORD_RETURNS.SALES_ORD_NR
    -- where exists (SELECT DISTINCT * from 
--SV_OR_1000_ORDER_HEADER)-- exists (select * from SV_OR_1000_ORDER_HEADER 
--join SV_MACORD_RETURNS on SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = 
--SV_MACORD_RETURNS.SALES_ORD_NR) 
    --where SV_OR_1000_ORDER_HEADER.SALES_ORD_NR is not null
    --where  SV_OR_1000_ORDER_HEADER.OFFER_CD not in ('36')

    where SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = 'W3151536'
    --group by SV_MACORD_RETURNS.SALES_ORD_NR,  SV_MACORD_RETURNS.DIVISION, --SV_OR_1000_ORDER_HEADER.CUST_EDP_ID, SV_MACORD_RETURNS.OFFER_CD
    --having COUNT(SV_OR_1000_ORDER_HEADER.SRC_SYS_TRANS_DT) < 2

【问题讨论】:

  • 旁白:看起来像你select Ord_Nr、Div_Cd、EDP_Id 和 Offer_Cd,但表中的列是 Div_Cd、Ord_Nr、EDP_Id 和 Offer_Cd。前两列似乎交换了。

标签: sql-server tsql duplicates sql-insert


【解决方案1】:

以这种方式测试... 你可以这样写查询:

SELECT DISTINCT (SV_OR_1000_ORDER_HEADER.SALES_ORD_NR), SV_OR_1000_ORDER_HEADER.DIV_CD, SV_OR_1000_ORDER_HEADER.CUST_EDP_ID, SV_OR_1000_ORDER_HEADER.OFFER_CD
Into #t
from SV_OR_1000_ORDER_HEADER
where SV_OR_1000_ORDER_HEADER.SALES_ORD_NR = 'W3151536'

然后被其他表完美加入...

您可以在会话中使用 #table 并使用临时表而不是变量表。

查询需要结束:

 Drop table #t

其实你不需要 drop table 这是学术建议。?

【讨论】:

  • DISTINCTNOT 一个函数。它始终适用于选择列表的所有列。 distinct (a,b),c,ddistinct a,b,(c),ddistinct a,b,c,d 完全相同
  • 我知道...放弃有关问题的答案。我没有说不同的东西......只是说在#t中插入数据后使用模板表和在连接中使用
  • 我能够让它工作。我的问题的主要原因是在另一个表中我有一个日期范围,我正在寻找的记录不在其中。此外,我指定了插入中的列并且所有内容都正确填充。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多