SQL - 向视图添加多列
SQL - Add multiple columns to a VIEW
我创建了一个视图,并且工作正常(如下面的视图 "A" 所示)。
现在我必须将另一个 Table 的列加入视图。我的作品显示在下面的视图 "B" 中。
有谁知道正确的语法是什么?
(加入 LK_METRICS 使用 METRIC_NUMBER = METRIC_ID_OLD
添加[small title], [title], [demonstration], and [SLS] columns from metric tablesmall)
VIEW 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
VIEW 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
你非常接近。你只是在那里发生了一些额外的事情。取出 FROM ..
行逗号后的位:
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
唯一的另一件事是指定 table METRIC_NUMBER
来自哪个。那是 p.METRIC_NUMBER
吗?它可能不会对整体产生影响,因为您可能只有一个 table 字段 METRIC_NUMBER
但 SQL 尽可能明确是个好主意。
最后,您可以在 SELECT 语句中使用 K
table 中的字段,例如:
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
我创建了一个视图,并且工作正常(如下面的视图 "A" 所示)。 现在我必须将另一个 Table 的列加入视图。我的作品显示在下面的视图 "B" 中。 有谁知道正确的语法是什么?
(加入 LK_METRICS 使用 METRIC_NUMBER = METRIC_ID_OLD 添加[small title], [title], [demonstration], and [SLS] columns from metric tablesmall)
VIEW 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
VIEW 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
你非常接近。你只是在那里发生了一些额外的事情。取出 FROM ..
行逗号后的位:
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
唯一的另一件事是指定 table METRIC_NUMBER
来自哪个。那是 p.METRIC_NUMBER
吗?它可能不会对整体产生影响,因为您可能只有一个 table 字段 METRIC_NUMBER
但 SQL 尽可能明确是个好主意。
最后,您可以在 SELECT 语句中使用 K
table 中的字段,例如:
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