0

我有多个符号的报价表

表报价

ID INT

符号 NVARCHAR(6)

DT 日期时间

价格小数(18,5)

表临时符号

符号 NVARCHAR(6)

我只想从 QUOTES 中提取那些符号也在临时表中的符号,这些符号可能会根据用户请求而变化

Create TABLE TempSymbol
(
   SYMBOL NVARCHAR(6)      NOT NULL
);
INSERT INTO TempSymbol(SYMBOL) VALUES ('MSFT');
INSERT INTO TempSymbol(SYMBOL) VALUES ('INTC');
INSERT INTO TempSymbol(SYMBOL) VALUES ('AAPL');

我想要一个查询,它将从 QUOTES 返回以下数据...

日期时间符号1 | 价格1 | 符号2 | 价格2 | 符号3 | 价格3


2012-11-12 12:10:00 MSFT | 12.10 | 国际贸易中心 | 5.68 | 苹果 | 16.89

2012-11-12 12:15:00 微软 | 12.22 | 国际贸易中心 | 5.97 | 苹果 | 16.22

……

...

..

SELECT DT, SYMBOL, PRICE FROM QUOTE AS Q INNER JOIN TempSymbol AS TS ON Q.SYMBOL = TS.SYMBOL

这将返回我需要转置但在 SQLite 中不可用的记录,我应该尝试另一种方法吗?任何帮助表示赞赏。

4

2 回答 2

0

试试这个

SELECT DT, SYMBOL, PRICE FROM QUOTE where SYMBOL in (Select SYMBOL from TempSymbol)
于 2013-07-06T04:08:49.027 回答
0

SQL 正在完成它旨在完成的部分问题:检索数据。您可以添加ORDER BY DT以使相同日期时间的记录相邻。

如果你想一想,你会发现 aSELECT不可能返回你想要的东西。它返回表行,并且 SQL 表行具有恒定长度。所以做你所谓的“枢轴”不是一个SELECT操作。您可能正在考虑电子表格中的枢轴。数据库不是电子表格。

之后,最好使用带有 SQLite 接口的任何语言(例如 Android 中的 Java;否则为 C 或 TCL)的小程序生成您想要的报告。进行查询。将行作为散列、数组或 ODM 记录取回。剩下的就是这个数据的几个循环。算法是:

last_dt = null
for row in all rows
  if row.dt != last_dt
    start new output line
    print dt
    last_dt = dt
  end
  print ' | ', row.symbol, ' | ', row.price
end

另一个注意事项:使用存储过程和 XML 对象等高级 DB 功能,您可以在 SQL 中实现这一点。XML 对象可以有可变数量的字段。这里的限制是 SQLite,它不提供这些功能。

于 2013-07-06T03:20:38.387 回答