我正在从iPhone使用sqlite db。
我有一个chartdatatable
,如下所示。
deviceTypeHash是可以具有2或3个SeriesNameHash的设备的哈希。
DevicTypeHash的主表来自DeviceParamUnit
表,如下所示
正如您将看到的那样,DeviceTypeHash-表示设备-对于前三个记录是通用的,并且它们具有3个不同的SeriesNameHash,它们对应于DeviceParamUnit表中的Systolic,Diastolic和PulseRate。它们就像是第一台设备的参数,该设备是BP监视器。 (是的,血压有三个读数-收缩压,直径...)
以类似的方式,下一个设备是温度棒,它具有11个参数,由11个唯一的序列名称哈希表示。
我需要的是,当我向查询提供DeviceNameHash时,它应该向我显示其对应的SeriesNameHash(参数)的values
(列在chartdatatable中)。但是它应该显示出它是枢轴的。
这就是我想要获得的关键所在。
SELECT time
, MAX(CASE WHEN SeriesNameHash = -7656137604397428413 THEN value ELSE 0 END) as '-7656137604397428413'
, MAX(CASE WHEN SeriesNameHash = 1538157359584988292 THEN value ELSE 0 END) as '1538157359584988292'
, MAX(CASE WHEN SeriesNameHash = 6366213907772730014 THEN value ELSE 0 END) as '6366213907772730014'
, MAX(CASE WHEN SeriesNameHash = -5604390693208903701 THEN value ELSE 0 END) as '-5604390693208903701'
, MAX(CASE WHEN SeriesNameHash = -5604390693208899606 THEN value ELSE 0 END) as '-5604390693208899606'
, MAX(CASE WHEN SeriesNameHash = -5604390693208928275 THEN value ELSE 0 END) as '-5604390693208928275'
, MAX(CASE WHEN SeriesNameHash = -5604390693208924180 THEN value ELSE 0 END) as '-5604390693208924180'
, MAX(CASE WHEN SeriesNameHash = -5604390693208920081 THEN value ELSE 0 END) as '-5604390693208920081'
, MAX(CASE WHEN SeriesNameHash = -5604390693208915986 THEN value ELSE 0 END) as '-5604390693208915986'
, MAX(CASE WHEN SeriesNameHash = -5604390693208944655 THEN value ELSE 0 END) as '-5604390693208944655'
, MAX(CASE WHEN SeriesNameHash = -5604390693208940560 THEN value ELSE 0 END) as '-5604390693208940560'
, MAX(CASE WHEN SeriesNameHash = -5604390693208936461 THEN value ELSE 0 END) as '-5604390693208936461'
, MAX(CASE WHEN SeriesNameHash = -5604390693208932366 THEN value ELSE 0 END) as '-5604390693208932366'
, MAX(CASE WHEN SeriesNameHash = 4940014074620696541 THEN value ELSE 0 END) as '4940014074620696541'
, MAX(CASE WHEN SeriesNameHash = 4940014074620704732 THEN value ELSE 0 END) as '4940014074620704732'
FROM chartdatatable
GROUP BY time
结果。
(我知道我可以将列命名为'systolic','diastolic'...但这是重点。
现在的问题是,仅向查询提供DeviceTypeHash时,如何动态地仅显示这些列(每个列都有SeriesNameHash)。
例如-如果我需要(按时间)查看B.P Monitor的所有值,则其seriesHashName将会是这样
SELECT seriesname, seriesnamehash FROM 'DeviceParamUnitTable' where DeviceTypeHash = 6814980142680378626
Systolic -7656137604397428413
Diastolic 1538157359584988292
Pulse Rate 6366213907772730014
如何修改父查询,使其仅在由BP监视器的DeviceTypeHash提供时获得数据透视结果的前三列,而在由(例如)TemperatureWand的DeviceTypeHash提供时获得(例如)列4-14。当前,它显示了所有参数值,当我需要上面制作的数据透视表时,它没有用。
总而言之,我做了一个枢纽,但是现在如何获得特定的列 由一个具有映射到这些列名称的值提供。
如果通过查询视图无法做到这一点,则可以建议其他任何方法。任何帮助将不胜感激。