我想使用视图表const HttpClient = axios.create({
baseURL: env.baseUrl,
});
HttpClient.interceptors.response.use((response) => {
return response;
}, (error) => {
return Promise.resolve({ error });
});
简化数据,但我很难搞清楚。
我有一个MainView
表,该表特定于客户端,语言和状态。 Fact
表中的ID来自Fact
表,其中只有FactLink
列。 FactLinkID
表格中有一个Status
列,需要在汇总视图中显示,而不是Order
。我的StatusID
表引用了多列中的Main
表。
最终目标是能够通过Fact
,LanguageID
,StatusOrder
的复合索引查询视图表,比以前更简单,抓取指定的最大{ {1}}和指定的ClientID
或StatusOrder
1.所以,这就是我希望通过视图表简化的内容。
所以,
主要
ClientID
事实
ClientID
FactLink
ID | DescriptionID | DisclaimerID | Other
----+---------------+--------------+-------------
50 | 1 | 2 | Blah
55 | 4 | 3 | Blah Blah
状态
FactID | LanguageID | StatusID | ClientID | Description
-------+------------+----------+----------+------------
1 | 1 | 1 | 1 | Some text
1 | 2 | 1 | 1 | Otro texto
1 | 1 | 3 | 2 | Modified text
2 | 1 | 1 | 1 | Disclaimer1
3 | 1 | 1 | 1 | Disclaimer2
4 | 1 | 1 | 1 | Some text 2
的MainView
ID
--
1
2
3
4
以下是我使用引用ID | Order
---+------
1 | 10
2 | 100
3 | 20
表的单个列实现它的方法:
MainID | StatusOrder | LanguageID | ClientID | Description | Disclaimer | Other
-------+-------------+------------+----------+---------------+-------------+------
50 | 10 | 1 | 1 | Some text | Disclaimer1 | Blah
50 | 10 | 2 | 1 | Otro texto | NULL | Blah
50 | 20 | 1 | 2 | Modified text | NULL | Blah
55 | 10 | 1 | 1 | Some text 2 | Disclaimer2 | Blah Blah
我之前的查询询问了除Fact
之外的所有内容。但添加DROP VIEW IF EXISTS dbo.KeywordView
GO
CREATE VIEW dbo.KeywordView
WITH SCHEMABINDING
AS
SELECT t.KeywordID, f.ClientID, f.Description Keyword, f.LanguageID, s.[Order] StatusOrder
FROM dbo.Keyword t
JOIN dbo.Fact f
ON f.FactLinkID = t.KeywordID
JOIN dbo.Status s
ON f.StatusID = s.StatusID
GO
CREATE UNIQUE CLUSTERED INDEX KeywordIndex
ON dbo.KeywordView (KeywordID, ClientID, LanguageID, StatusOrder)
似乎使事情变得复杂。这是我之前没有StatusOrder
的查询。当我在一个只有一个StatusOrder
链接列的表上创建视图时,它大大简化了一些事情,但将其扩展到两列或更多列已经证明是困难的!
StatusOrder
答案 0 :(得分:0)
不确定这是否是解决此问题的最佳性能或优雅方式。但我终于想到了一种方法。下面的解决方案的问题是它不能再被索引。所以,现在要弄清楚如何在不必将其包装在派生表中的情况下这样做。
SELECT
x.ID,
x.StatusOrder,
x.LanguageID,
x.ClientID,
x.Other,
MAX(x.Description),
MAX(x.Disclaimer)
FROM (
SELECT
Main.ID,
s.StatusOrder,
f.LanguageID,
f.ClientID,
f.Description,
NULL Disclaimer,
Main.Other
FROM Main
JOIN Fact f
ON f.FactID = Main.DescriptionID
JOIN Status s ON s.StatusID = f.StatusID
UNION ALL
SELECT
Main.ID,
s.StatusOrder,
f.LanguageID,
f.ClientID,
NULL Description,
f.Description Disclaimer,
Main.Other
FROM Main
JOIN Fact f
ON f.FactID = Main.DisclaimerID
JOIN Status s ON s.StatusID = f.StatusID
) x
GROUP BY x.ID, x.StatusOrder, x.LanguageID, x.ClientID, x.Other