SQL查询此要求

Lit*_*T.V 5 mysql sql sqlite ios

我有一个带表的sqlite数据库 sample,surveytype并且status.所有3个表的主键id被设置为表'Operation'的外键.请参见下图中的scema

在此输入图像描述

我的operation桌子因此具有价值

在此输入图像描述

并作为样本

在此输入图像描述

和状态

在此输入图像描述

和调查类型为

在此输入图像描述

需要

我需要实现的是

在此输入图像描述

从操作表中获取状态ID的信息,并针对所有调查类型显示特定建筑物.

试着

我找到了一种方法,通过程序循环获取所有样本ID和所有调查类型,并获得单独的状态

for all sampleid in sample table
{
   for all statustypeid in statustype table
   {  
      select statusid from operation where sampleid = 2 and surveytypeid=1
    }
}
Run Code Online (Sandbox Code Playgroud)

sql single query是否有更好的选项来生成包含所有值的表

注意:使用sqlite,适用于ios应用

CL.*_*CL. 0

您需要为每种调查类型分配一列。这是不可能直接实现的,因为 SQLite 没有数据透视函数。

您需要执行两个步骤。首先,获取所有调查类型:

SELECT ID, Longname FROM SurveyType
Run Code Online (Sandbox Code Playgroud)

然后,使用这些值构建一个查询,其中每个调查类型列都有一个子查询,如下所示:

SELECT BuildingName_EN AS 'Building Name',
       BuildingID AS 'Building id',
       (SELECT StatusID FROM Operation
        WHERE SampleID = Sample.ID AND SurveyTypeID = 1) AS 'Survey 1',
       (SELECT StatusID FROM Operation
        WHERE SampleID = Sample.ID AND SurveyTypeID = 2) AS 'Survey 2',
       (SELECT StatusID FROM Operation
        WHERE SampleID = Sample.ID AND SurveyTypeID = 3) AS 'New Survey 3'
FROM Sample
Run Code Online (Sandbox Code Playgroud)