【发布时间】:2014-01-04 00:38:58
【问题描述】:
我有以下 sql 语句。将结果全部集中在一列中。我想要的是让仪表板标题返回一次,然后每个图表中的一行属于另一列中的仪表板。
SELECT
DashBoards.Title AS [Dash Board]
FROM DashBoards
GROUP BY DashBoards.Title
UNION ALL
SELECT
Charts.Title AS Chart
FROM Charts
INNER JOIN DashBoardCharts
ON Charts.ID = DashBoardCharts.ChartID
INNER JOIN DashBoards
ON DashBoardCharts.DashBoardID = DashBoards.DashBoardID
此查询涉及三个表:
CREATE TABLE Dashboards (
DashboardID INTEGER NOT NULL PRIMARY KEY,
Title CHAR(50) NOT NULL,
ISDEFAULT BIT NOT NULL,
CompanyID INTEGER NULL
);
INSERT INTO Dashboards
VALUES (1,'Main DashBoard', 1, NULL);
CREATE TABLE Charts (
ID INTEGER NOT NULL PRIMARY KEY,
Title CHAR(50) NOT NULL,
SPName CHAR(50) NOT NULL,
XField CHAR(50) NOT NULL,
YField CHAR(50) NOT NULL
);
INSERT INTO Charts
VALUES (1,'Alerting and Monitoring', 'spGetData', 'SumType', 'SumAmount');
CREATE TABLE DashboardCharts (
DashBoardID INTEGER NOT NULL FOREIGN KEY REFERENCES Dashboards (DashboardID),
ChartID INTEGER NOT NULL FOREIGN KEY REFERENCES Charts (ID)
);
INSERT INTO DashboardCharts
VALUES (1, 1);
我正在寻找的结果是这样的。
仪表板图表
“主仪表板”、“销售分析”
“警报和监控”
“另一个仪表板”、“成本管理”
'结算管理'
I.E.只返回一次仪表板标题以及属于该仪表板的所有图表。
【问题讨论】:
-
请从每个表中发布一个小数据样本,以及您希望实现的输出的样本。 (请勿截图,请以文本形式输入数据,以便我们在必要时将其移植到sqlfiddle.com)
-
请看原始问题。感谢您的帮助。
-
没有为
DashboardCharts表提供的足够数据来回答您的问题。预期的结果也不是很清楚——你能详细说明一下吗? -
啊,我明白了。除非您希望将所有图表作为字符串连接成一行,否则您不能只返回仪表板一次,然后是所有图表。 SQL 将以 2 维格式返回结果,并与每个图表重复的仪表板一起返回它们。您的应用程序代码有责任格式化它们以显示您想要的方式,而不是 RDBMS'
-
感谢您提供此信息,我将在我的应用程序代码中探索处理此问题的方法。
标签: sql sql-server