【问题标题】:Proc SQL not returning any columns. InnerjoinProc SQL 不返回任何列。内部联接
【发布时间】:2021-08-22 18:28:55
【问题描述】:

我正在尝试收集有关哪个商店收到哪个 SKU 的信息以及其他一些相关信息。数据在多个表中,所以我正在尝试内部加入信息。我正在使用 SAS,它通过直通在 SQL Server 中运行。以下是我尝试过的查询。我已经确认||在传递中工作。问题似乎始于 from 语句

connect to odbc (dsn='X' uid='X' pwd='XY');
create table School.TRANS_INFO as SELECT * from connection to odbc
(SELECT Distinct
S.Schd_t AS Schd_Date format MMDDYY10.,
S.otb As Ship_Loc,
W.store_NUMBER AS store,
S.SHP_ID AS SHIP_ID,
W.store_CITY_STATE,
Q.Stat_CD AS Status,
(S.PROD_CD || S.plt_CD) AS SKU,
W.ACCOUNT_TYPE as Location
FROM
SHPMT_DTL S 
INNER JOIN store W ON W.store_NUMBER =  S.Otb_DEST_store_NBR,
INNER JOIN SHP_LEG Q ON Q.SHPMT_ID = S.SHP_ID
WHERE
W.ACCOUNT_TYPE = 'I' 
AND S.Schd_t <= Sysdate 
AND Q.Stat_CD IN ('S','P')
ORDER BY  Schd_Date);
disconnect from odbc;
QUIT; 

但是,在我运行此命令后,我收到一条错误消息,提示“PROC SQL 要求任何创建的表至少有 1 列”。任何诊断此问题的帮助将不胜感激。

【问题讨论】:

  • 请在转发之前至少修复我们已经注意到的问题。 stackoverflow.com/questions/67695383/…
  • Reeza,我不确定你提到的是什么问题。我用过||并在类似的查询中成功格式化 mmddyy10。
  • 这个 S.Schd_t AS Schd_Date format MMDDYY10. 是 SAS 特定的语法。它在 SQL-SERVER 数据库中不起作用。
  • 这能回答你的问题吗? SAS PROC SQL Innerjoin returning no columns
  • 请不要转发重复的问题。

标签: sql-server sas odbc inner-join proc-sql


【解决方案1】:

将 SAS 语法移至查询的 SAS 端。 FROM 子句中间还有一个额外的逗号。请注意,如果您习惯将逗号(或任何其他连续字符)放在行首而不是行尾,程序员将更容易扫描并确保它们正确完成。

create table School.TRANS_INFO as 
SELECT Distinct
  Schd_t AS Schd_Date format MMDDYY10.
, otb As Ship_Loc
, store_NUMBER AS store
, SHP_ID AS SHIP_ID
, store_CITY_STATE
, Stat_CD AS Status
, (PROD_CD || plt_CD) AS SKU
, ACCOUNT_TYPE as Location
from connection to odbc
(SELECT Distinct
  S.Schd_t 
, S.otb 
, W.store_NUMBER 
, S.SHP_ID 
, W.store_CITY_STATE
, Q.Stat_CD
, S.PROD_CD
, S.plt_CD
, W.ACCOUNT_TYPE
FROM SHPMT_DTL S 
INNER JOIN store W ON W.store_NUMBER =  S.Otb_DEST_store_NBR
INNER JOIN SHP_LEG Q ON Q.SHPMT_ID = S.SHP_ID
WHERE W.ACCOUNT_TYPE = 'I' 
  AND S.Schd_t <= Sysdate 
  AND Q.Stat_CD IN ('S','P')
ORDER BY S.Schd_t
);

【讨论】:

  • 首先,我想说逗号提示非常有用,因为您是正确的,它更容易发现缺少的逗号。其次,我尝试使用 proc sql 进行上述查询,并在停止时连接到 odbc,并在底部连接到来自 ODBC 的 discconect,但我得到一个“在贡献表中找不到列:Account_Type、OTB、Prod_CD、plt_CD、shp_id、 Stat_CD、Store_city_state、Store_number。" 错误
  • 更新:删除了与 ODBC 的断开连接并且它起作用了。知道为什么会导致问题。我确实最终放弃了。最后也是
  • 如果你有退出,你真的不需要断开连接语句。断开连接的唯一真正原因是,如果您要在同一个 PROC SQL 步骤中执行其他长时间运行的查询,并且希望通过提前清除连接来更好地减少远程数据库的负载。
  • 有道理!谢谢!
猜你喜欢
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2018-12-13
相关资源
最近更新 更多