首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sqlite中有没有可能不显示没有内容的列?

在sqlite中有没有可能不显示没有内容的列?
EN

Stack Overflow用户
提问于 2020-03-12 16:49:12
回答 1查看 35关注 0票数 1

我有一个表,行中有700个投资组合的名称,列中有70个资产类别。

每个投资组合由几个资产类别组成,以百分比价值表示。许多投资组合只有3-5个资产类别,而有些则有20个。

现在,我希望输出的每个投资组合只包含其包含的资产类,所以我不希望显示没有内容的列。我使用SQLite命令行界面来创建输出。

每个输出应该在一行上。

这就是我现在要做的。我使用投资组合组成的资产类别手动选择列。我只是认为有700行,可能会有更聪明的方法。

代码语言:javascript
运行
复制
 SELECT PortfolioName, 
       TotalUSMarket AS "Total US Market", 
       RealEstate AS "REITs",
       InternationalDeveloped AS "International Developed",
       TotalBondMarket AS "Total Bond Market",
       Commodities AS "Commodities"

        FROM PortfolioAllocation
            WHERE PortfolioAllocation.PortfolioNumber_id IN (10);

某些输出有2行或更多行需要输出。

EN

回答 1

Stack Overflow用户

发布于 2020-03-12 22:12:12

您有多个基金和多个资产类别。每个基金可以有多个资产,每个资产可以被多个基金使用。这是一个经典的many to many relationship,最好的表现是使用junction table连接基金和资产的多表设计,而不是像您看到的那样,试图将所有东西都放到一个表中。

其思想是有一个表描述基金(名称、成立日期、费用等),一个表描述资产类别,第三个表将这两个表联系起来,并使用另外两个表的主键作为外键,保存有多少基金投入到该资产类别中。

示例数据库和一些示例数据:

代码语言:javascript
运行
复制
CREATE TABLE investment_fund(id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE asset_class(id INTEGER PRIMARY KEY, name TEXT UNIQUE);
CREATE TABLE investment_percentages(
       fund_id INTEGER REFERENCES investment_fund(id),
       asset_id INTEGER REFERENCES asset_class(id),
       percentage REAL,
       PRIMARY KEY(fund_id, asset_id)) WITHOUT ROWID;
CREATE VIEW fund_ownership AS
  SELECT fund_id, if.name AS fund_name, asset_id, ac.name AS asset_name
       , percentage
  FROM investment_fund AS if
  JOIN investment_percentages AS i ON if.id = i.fund_id
  JOIN asset_class AS ac ON i.asset_id = ac.id;
INSERT INTO investment_fund VALUES (1, 'No Bonds Here');
INSERT INTO investment_fund VALUES (2, 'We Do Bonds');
INSERT INTO asset_class VALUES (1, 'Municipal Bond Market');
INSERT INTO asset_class VALUES (2, 'REIT');
INSERT INTO asset_class VALUES (3, 'S&P500 Index');
INSERT INTO investment_percentages VALUES (1, 2, 40);
INSERT INTO investment_percentages VALUES (1, 3, 60);
INSERT INTO investment_percentages VALUES (2, 1, 75);
INSERT INTO investment_percentages VALUES (2, 3, 25);

然后,您可以获得特定基金拥有的所有类别的列表,并且只包含这些类别,而不必提前知道它们是什么:

代码语言:javascript
运行
复制
sqlite> SELECT * FROM fund_ownership WHERE fund_name = 'We Do Bonds' ORDER BY percentage DESC;
fund_id     fund_name    asset_id    asset_name             percentage
----------  -----------  ----------  ---------------------  ----------
2           We Do Bonds  1           Municipal Bond Market  75.0
2           We Do Bonds  3           S&P500 Index           25.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60650455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档