Имена столбцов предложения select, которые предоставляются динамически на основе условия - PullRequest
0 голосов
/ 15 ноября 2018

Я использую sqlite db с iphone.

У меня есть chartdatatable, как показано ниже.

deviceTypeHash - это хеш для устройства, которое может иметь 2 или 3 SeriesNameHash.

enter image description here

Основная таблица для DevicTypeHash взята из таблицы DeviceParamUnit, как показано ниже

enter image description here

Как вы увидите, DeviceTypeHash - представляет устройство - является общим для первых трех записей, и у них есть 3 различных SeriesNameHash, которые соответствуют Systolic, Diastolic и PulseRate в таблице DeviceParamUnit. Они похожи на параметры первого устройства, которое является монитором BP. (что верно, кровяное давление имеет три значения - систолическое, диа ...)

Аналогичным образом, следующее устройство - это температурная палочка, и оно имеет 11 параметров, представленных 11 уникальными именами серий.

Мне требуется, чтобы при предоставлении запроса с DeviceNameHash он показывал мне values (столбец присутствует в chartdatatable) для соответствующего SeriesNameHash (параметры). Но это должно показать его разворот.

Вот что я пытался получить в центре.

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

(Я знаю, что мог бы назвать столбцы «систолическим», «диастолическим» ... но это не относится к делу.

Теперь проблема заключается в том, как динамически отображать только эти столбцы (каждый столбец имеет SeriesNameHash), когда в запросе указывается только DeviceTypeHash.

E.g. Если бы мне нужно было просмотреть все значения (по времени) монитора B.P, его seriesHashName будет выглядеть примерно так

SELECT seriesname, seriesnamehash  FROM 'DeviceParamUnitTable' where DeviceTypeHash = 6814980142680378626

Systolic    -7656137604397428413
Diastolic   1538157359584988292
Pulse Rate  6366213907772730014

Как изменить родительский запрос, чтобы получать только первые три столбца сводного результата, когда он предоставляется DeviceTypeHash монитора BP, и получать, скажем, столбец 4-14, если он предоставляется DeviceTypeHash, скажем, TemperatureWand. В настоящее время он показывает все значения параметров и бесполезен, когда мне требуется отфильтрованный свод, сделанный выше.

Подводя итог, я сделал сводку, но как мне теперь получить конкретные столбцы когда предоставляется значением, которому сопоставлены имена столбцов.

Если это невозможно по запросу, просмотрите любой другой подход. Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...