SQL-向视图中添加多个列

SQL-向视图中添加多个列,sql,join,left-join,sql-view,Sql,Join,Left Join,Sql View,有一个我创建的视图,运行良好(如下面的视图“a”所示)。 现在我必须将另一个表中的列连接到视图。我的工作如下面的视图“B”所示。 有人知道正确的语法是什么吗 (使用METRIC\u NUMBER=METRIC\u ID\u OLD加入LK\u度量) 从metric tablesmall中添加[小标题]、[标题]、[演示]和[SLS]列) 查看A CREATE VIEW [dbo].[V_PS_DA] AS WITH today AS ( SELECT * FROM dbo.LK_

有一个我创建的视图,运行良好(如下面的视图“a”所示)。 现在我必须将另一个表中的列连接到视图。我的工作如下面的视图“B”所示。 有人知道正确的语法是什么吗

(使用METRIC\u NUMBER=METRIC\u ID\u OLD加入LK\u度量) 从metric tablesmall中添加[小标题]、[标题]、[演示]和[SLS]列)

查看A

CREATE VIEW [dbo].[V_PS_DA]
AS  WITH
today AS
(   SELECT * 
    FROM dbo.LK_NET_WORK_DAYS 
    WHERE [DATE] = CAST(GETDATE() AS DATE)
)
SELECT 
  p.*,
  hrs.DATE_ORDINAL      ENTER_HRSC_ORDINAL,
  strt.DATE_ORDINAL     START_DATE_ORDINAL,
  ndt.DATE_ORDINAL      END_DATE_ORDINAL,
  today.DATE_ORDINAL    TODAY_ORDINAL,
FROM dbo.PS_DA p
LEFT JOIN dbo.LK_NET_WORK_DAYS hrs
  ON p.ENTER_HRSC = hrs.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS strt
  ON p.START_DATE = strt.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS ndt
  ON p.END_DATE = ndt.[DATE]
CROSS JOIN today;  
GO
查看B

CREATE VIEW [dbo].[V_PS_DA]
AS WITH
today AS
(   SELECT * 
    FROM dbo.LK_NET_WORK_DAYS -- This contains the date data needed
    WHERE [DATE] = CAST(GETDATE() AS DATE)
)
SELECT 
  p.*,
  hrs.DATE_ORDINAL      ENTER_HRSC_ORDINAL,
  strt.DATE_ORDINAL     START_DATE_ORDINAL,
  ndt.DATE_ORDINAL      END_DATE_ORDINAL,
  today.DATE_ORDINAL    TODAY_ORDINAL,
  kst.[Small Title] Small_Title,
  kt.[Title]    Title,
  kd.[Demonstration]  Demonstration,
  ks.SLS    SLS

FROM dbo.PS_DA p, dbo.LK_METRICS k
LEFT JOIN dbo.LK_NET_WORK_DAYS hrs
  ON p.ENTER_HRSC = hrs.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS strt
  ON p.START_DATE = strt.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS ndt
  ON p.END_DATE = ndt.[DATE]
CROSS JOIN today,
LEFT JOIN dbo.LK_METRICS k
  ON k.METRIC_ID_OLD = METRIC_NUMBER

你很接近。你只是有一些额外的事情发生在那里。从..行中取出逗号后的位:

CREATE VIEW [dbo].[V_PS_DA]
AS WITH
today AS
(   SELECT * 
    FROM dbo.LK_NET_WORK_DAYS -- This contains the date data needed
    WHERE [DATE] = CAST(GETDATE() AS DATE)
)
SELECT 
  p.*,
  hrs.DATE_ORDINAL      ENTER_HRSC_ORDINAL,
  strt.DATE_ORDINAL     START_DATE_ORDINAL,
  ndt.DATE_ORDINAL      END_DATE_ORDINAL,
  today.DATE_ORDINAL    TODAY_ORDINAL,
  kst.[Small Title] Small_Title,
  kt.[Title]    Title,
  kd.[Demonstration]  Demonstration,
  ks.SLS    SLS

FROM dbo.PS_DA p
LEFT JOIN dbo.LK_NET_WORK_DAYS hrs
  ON p.ENTER_HRSC = hrs.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS strt
  ON p.START_DATE = strt.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS ndt
  ON p.END_DATE = ndt.[DATE]
CROSS JOIN today,
LEFT JOIN dbo.LK_METRICS k
  ON k.METRIC_ID_OLD = METRIC_NUMBER
唯一的另一件事是指定哪个表
度量单位编号
。那是p.METRIC\U编号吗?很有可能它不会对整体产生影响,因为您可能只有一个表,其中包含字段
METRIC\u NUMBER
,但对于SQL,最好尽可能明确

最后,您可以在SELECT语句中使用
K
表中的字段,如:

CREATE VIEW [dbo].[V_PS_DA]
AS WITH
today AS
(   SELECT * 
    FROM dbo.LK_NET_WORK_DAYS -- This contains the date data needed
    WHERE [DATE] = CAST(GETDATE() AS DATE)
)
SELECT 
  p.*,
  k.somefield,
  k.someotherfield,
  hrs.DATE_ORDINAL      ENTER_HRSC_ORDINAL,
  strt.DATE_ORDINAL     START_DATE_ORDINAL,
  ndt.DATE_ORDINAL      END_DATE_ORDINAL,
  today.DATE_ORDINAL    TODAY_ORDINAL,
  kst.[Small Title] Small_Title,
  kt.[Title]    Title,
  kd.[Demonstration]  Demonstration,
  ks.SLS    SLS

FROM dbo.PS_DA p
LEFT JOIN dbo.LK_NET_WORK_DAYS hrs
  ON p.ENTER_HRSC = hrs.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS strt
  ON p.START_DATE = strt.[DATE]
LEFT JOIN dbo.LK_NET_WORK_DAYS ndt
  ON p.END_DATE = ndt.[DATE]
CROSS JOIN today,
LEFT JOIN dbo.LK_METRICS k
  ON k.METRIC_ID_OLD = METRIC_NUMBER

你有错误吗?谢谢你。我运行了脚本,它成功了。我在SELECT语句中使用了“k”中的字段-使我的生活更轻松。看起来SQL确实需要明确性。也许我在第一次尝试时就已经太过火了。我感谢您的帮助如果它对明确声明的表很挑剔,那很可能是因为列
度量单位编号
出现在您声明中连接的多个表中,因此DB不知道您在谈论哪个
度量单位编号
。很高兴听到它起作用了!在这种情况下,我可以将其指定为p.METRIC\u NUMBER和k.METRIC\u ID,因为ID和NUMBER是不同的,所以不需要这样做。然而,这将尽可能地澄清这一点。非常感谢。