Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL逻辑问题和表的重命名_Sql Server_Case - Fatal编程技术网

Sql server SQL逻辑问题和表的重命名

Sql server SQL逻辑问题和表的重命名,sql-server,case,Sql Server,Case,我这里有两个问题,我想检查我的表Source\u Patient中是否有任何记录在Batch.SourceId=1的情况下将IsProcessed列计算为true ,当Batch.SourceId=2时,我想检查相同的,但在表Plain\u Data中,如果Plain\u Data有任何列IsProcessed的记录计算为true Plain\u Data.IsProcessed=1。与查询相关的另一个问题是如何重命名案例中的表 这是我到目前为止所做的,但它不起作用,我在关键字“FROM”附近得

我这里有两个问题,我想检查我的表Source\u Patient中是否有任何记录在Batch.SourceId=1的情况下将IsProcessed列计算为true ,当Batch.SourceId=2时,我想检查相同的,但在表Plain\u Data中,如果Plain\u Data有任何列IsProcessed的记录计算为true Plain\u Data.IsProcessed=1。与查询相关的另一个问题是如何重命名案例中的表


这是我到目前为止所做的,但它不起作用,我在关键字“FROM”附近得到了错误语法,但我猜错误相当普遍,查询构造不好,我还附加了数据模型:

查询 数据模型
我发现你的语法有很多问题。。。试试这个,看看是否适合你。我在这里遇到的唯一问题是,您需要将子查询与当前记录ID关联起来。但我希望这为您指明了正确的方向

SELECT 
    B.Id AS BatchId,
    S.Id AS SourceId ,
    S.Label AS SourceLabel,
    B.Number AS BNumber,
    RD.Id AS RawDataId,
    (CASE 
        WHEN B.SourceId = 1 THEN 
            (SELECT TOP 1 Case When ISNULL(SP1.IsProcessed,0) = 1 Then 1 Else 0 END FROM Source_Patient SP1 Where SP1.IsProcessed = 1 AND SP1.BatchID = SP.BatchID) 
            
        WHEN B.SourceId = 2 THEN 
            (SELECT TOP 1 Case When ISNULL(PD1.IsProcessed,0) = 1 Then 1 Else 0 END FROM Plain_Data PD1 Where PD1.IsProcessed = 1 AND PD1.RawDataID = ISNull(PD.RawDataID,0)) ELSE 0 END
    ) AS IsProcessed
   
    FROM Batch B
LEFT JOIN RawData RD ON B.Id = RD.BatchId
LEFT JOIN Plain_Data PD ON RD.Id = PD.RawDataId
INNER JOIN Source_Patient SP ON SP.BatchId=B.Id
INNER JOIN Source S ON B.SourceId = S.Id

不工作并不意味着什么。请解释问题所在。关键字“FROM”附近的语法不正确。但是我相信这个错误是非常普遍的,我认为查询本身是不正确的,我猜你能把嵌套的case语句移到前面的select列表中,看看你是否会遇到同样的错误吗?然后编辑您的问题并添加错误。这当然毫无意义:从Source_Patient.IsProcessed=1中选择TOP 1。我猜这个嵌套案例中的问题在某个地方。尝试删除它,看看错误是否消失。关键字“FROM”附近的语法不正确。关键字“FROM”附近的语法不正确。关键字“FROM”附近的语法不正确。那么…3次相同的错误现在你说的与当前记录ID相关是什么意思?因此,您的查询类似于如果Batch.DataSource=1,那么如果这个SELECT TOP 1 IsProcessed FROM Source\u Patient其中IsProcessed=1返回一个值,那么它将计算为true?你的未来会发生什么?我不明白第一条。基本上,我不确定是否选中SELECT TOP 1 IsProcessed FROM Source_Patient,其中IsProcessed=1为假,它将计算下一个WHEN Batch.SourceId=2…我得到的错误是关键字“WHEN”附近的语法不正确。关键字“ELSE”附近的语法不正确。我试图使用Select语句获取位的值,1或0。查看更新是否有效。由于我的数据模型,我想知道是否选择前1个IsProcessed FROM Plain_Data,其中IsProcessed=1我的查询使用此左键连接RawData上的Plain_数据来识别Plain_数据表。Id=Plain_Data.rawdataid回答您的问题。。。您正在为整个表选择顶部1,其中IsProcessed=1。这就是你想要的吗?还是希望它基于BatchID或RawDataID进行选择?
Batch

Id
SourceId (FK) - table Source
Number
Code
StartedAt
EndedAt


RawData

id
SourceId (FK) - table Source
BatchId (FK) - table Batch
CreatedAt

Source_Patient

Id
BatchId (FK) - table Batch
PatientId
NameFirst
NameLast
IsProcessed (Boolean)

Plain_Data

Id
RawDataId (FK) - table RawData
FirstName
LastName
IsProcessed (Boolean)

Source

Id
Label
SELECT 
    B.Id AS BatchId,
    S.Id AS SourceId ,
    S.Label AS SourceLabel,
    B.Number AS BNumber,
    RD.Id AS RawDataId,
    (CASE 
        WHEN B.SourceId = 1 THEN 
            (SELECT TOP 1 Case When ISNULL(SP1.IsProcessed,0) = 1 Then 1 Else 0 END FROM Source_Patient SP1 Where SP1.IsProcessed = 1 AND SP1.BatchID = SP.BatchID) 
            
        WHEN B.SourceId = 2 THEN 
            (SELECT TOP 1 Case When ISNULL(PD1.IsProcessed,0) = 1 Then 1 Else 0 END FROM Plain_Data PD1 Where PD1.IsProcessed = 1 AND PD1.RawDataID = ISNull(PD.RawDataID,0)) ELSE 0 END
    ) AS IsProcessed
   
    FROM Batch B
LEFT JOIN RawData RD ON B.Id = RD.BatchId
LEFT JOIN Plain_Data PD ON RD.Id = PD.RawDataId
INNER JOIN Source_Patient SP ON SP.BatchId=B.Id
INNER JOIN Source S ON B.SourceId = S.Id