根据条件动态提供的select子句的列名

时间:2018-11-15 05:25:07

标签: sqlite

我正在从iPhone使用sqlite db。

我有一个chartdatatable,如下所示。

deviceTypeHash是可以具有2或3个SeriesNameHash的设备的哈希。

enter image description here

DevicTypeHash的主表来自DeviceParamUnit表,如下所示

enter image description here

正如您将看到的那样,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

结果。

enter image description here

(我知道我可以将列命名为'systolic','diastolic'...但这是重点。

现在的问题是,仅向查询提供DeviceTypeHash时,如何动态地仅显示这些列(每个列都有Seri​​esNameHash)。

例如-如果我需要(按时间)查看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。当前,它显示了所有参数值,当我需要上面制作的数据透视表时,它没有用。

  

总而言之,我做了一个枢纽,但是现在如何获得特定的列   由一个具有映射到这些列名称的值提供。

如果通过查询视图无法做到这一点,则可以建议其他任何方法。任何帮助将不胜感激。

0 个答案:

没有答案