Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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查询到完整列,而不在Group By中定义它,并优化内部联接_Sql_Sql Server - Fatal编程技术网

SQL查询到完整列,而不在Group By中定义它,并优化内部联接

SQL查询到完整列,而不在Group By中定义它,并优化内部联接,sql,sql-server,Sql,Sql Server,一个包含多列,两个测试表有一列 Table: Client Name age Benefit Id code value Tom 33 AA 0A 1 12 Tom 33 AB 0C 1 13 Tom 33 AA 0C 5 11 Sam 31 CC 0B 3 10 Rik 28 EE 0D 5 9 Table2: Sell Code1 1 4 Table3: t

一个包含多列,两个测试表有一列

    Table:  Client
Name age Benefit Id code  value
Tom  33  AA      0A 1      12
Tom  33  AB      0C 1      13
Tom  33  AA      0C 5      11
Sam  31  CC      0B 3      10
Rik  28  EE      0D 5      9

Table2: Sell
Code1
1
4

Table3: tip
Code2 
5
6

我希望输出为姓名、年龄、福利、Id和代码,这些代码显示在表“sell”和“tip”中

我写的代码是

------Break code-----------

Create table  #temp1 as 
select c.* from Client c inner join Sell s on c.code1 = s.code
            where Benifit= AA
           
Create table  #temp2 as 
select c.* from Client c inner join Sell s on c.code2 = s.code
            where Benifit= AA

Create table  #combine as
select ss.* ,
       ,case when ss.value > 5 then ss.value- 5 Else 0 approved
from #temp1 ss inner join #temp2 ff
     On ss.Name= ff.Name
     AND  ss.Age= ff.Age 
where Benifit= 'AA'
Group by ss.Name Age
------------------------------------------------

----Since 3 table are created with repeated logic, I have put Above code is put into one code, even thought it is not optimized ----------------

select ss.Name, ss.age
             ,case when ss.value > 5 then ss.value- 5 Else 0 approved
        from 
          (select * from Client c inner join Sell s on c.code1 = s.code
            where Benifit= AA) ss
    inner join
          (select * from Client cc inner join Tip t on cc.code2 = t.code
            where Benifit= AA) ff
     On ss.Name= ff.Name
     AND  ss.Age= ff.Age 
     Group by Name Age

所以,我有两个问题:

  • 我想要姓名和年龄旁边的福利、Id、代码和值,因为当前查询不允许这样做,因为使用了“分组依据”

  • 我使用两个选择多个内部联接,如下所示

  • 但是我不希望我的代码重复使用与上面重复的代码相同的代码

  • 通过从“值”列中减去5创建新的“已批准”列
  • 注意:输出将基于“名称”和“年龄”之间的内部联接

    • 客户与销售的内部连接
    • 客户端和Tip之间的内部连接
    请建议


    注意:我想要名称、年龄,其中Benifit=AA的“Sell”和“Tip”中都有代码,尽管输出将来自“Sell”。

    我想您需要这样的查询-

    SELECT C.Name, C.Age, C.Benefit, C.Id, C.Code, (C.Value - 5) Approved
    FROM Client C 
        INNER JOIN Sell S ON C.Code = S.Code1
        INNER JOIN Tip T ON S.Code1 = T.Code2
    WHERE C.Benefit = 'AA'
    

    如何确定结果集中的福利和id?我在
    sell
    tip
    表中都没有看到
    code=1
    。它只在
    sell
    中。另外,
    Approved
    来自何处?Approved是一个新的列,从值列中减去5。是的,我的错误代码1和代码2。实际名称是codeBenefit,Id是我在结果中需要的,因此我将其作为参考。事实上,给出的输出是我的要求,但我不知道如何获得适当的答复,但它不会工作。因为,首先我有一个内部连接客户机和Sell,以获得客户机和Sell表中存在代码的所有名称。然后我必须再次使用Tip内部连接客户机,以获得客户机和Tip中的代码。最后,我们必须根据名称、年龄(因为这两者都存在于两个innerjoin的输出中)以及Where condit Benefit=“AA'我的答案仅基于您在问题中提供的客户、销售、小费三个表格中的样本值/结构。根据您在这里的评论,我想说您在问题中提供的带有示例值的表结构是不正确的。请更新问题并提供适当的表格结构。我已经做了必要的更改。您的问题仍然有以下表格信息-客户(姓名、年龄、福利、Id、代码、价值)。销售(代码1),小费(代码2)。这是正确的信息吗?如果不正确,请更新您的问题。是的,它是正确的。让我更详细地解释一下代码
    a.  (select * from Client c inner join Sell s on c.code = s.code1
                where Benifit= AA) ss
      
    b.  (select * from Client cc inner join Tip t on cc.code2 = t.code
                where Benifit= AA) ff
    
    SELECT C.Name, C.Age, C.Benefit, C.Id, C.Code, (C.Value - 5) Approved
    FROM Client C 
        INNER JOIN Sell S ON C.Code = S.Code1
        INNER JOIN Tip T ON S.Code1 = T.Code2
    WHERE C.Benefit = 'AA'