Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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_Database_Select_Group By - Fatal编程技术网

SQL Server,根据子查询的结果从表中获取列

SQL Server,根据子查询的结果从表中获取列,sql,sql-server,database,select,group-by,Sql,Sql Server,Database,Select,Group By,我有三张桌子: Table Client { int ClientID PK varchar ClientName } Table B { varchar Luna PK int NumarI PK int ClientID FK <---- Foreign key from table Client } TABLE C { varchar Luna FK <---- Foreign

我有三张桌子:

Table Client {
   int ClientID PK
   varchar ClientName 
}

    Table B {
       varchar Luna PK
       int NumarI PK
       int ClientID FK  <---- Foreign key from table Client 
    }

    TABLE C {
       varchar Luna FK <---- Foreign key from table b
       int NumarI FK <---- Foreign key from table b
    }
我必须从表B和C中选择每个月价格最高的账单。B和C之间的连接创建一个账单表,然后我必须检查哪个客户的账单最高。客户的名称在客户表中

这个查询为我提供了一个每月账单最高的表,但我不知道如何查询 与客户机表进行连接,以便显示所需内容

SELECT YEAR(d.Data) as an , MONTH(d.Data) as luna , max(suma) as suma
FROM  TabelaB d
                    join (
                             SELECT d.NumarI , d.Luna ,sum(d1.Cantitate*d1.PretVinzare)  as                                suma FROM TabelaB d left outer join TabelaC d1 on d.Luna = d1.Luna and d.NumarI = d1.NumarI

                             GROUP BY d.NumarI , d.Luna ) x on x.NumarI=d.NumarI and x.Luna = d.Luna
WHERE YEar(d.Data) >=  2012 and Year(d.Data) <= 2015
GROUP BY MONTh(d.Data ), YEAR(d.Data)
==========================================================================================

Table Client {
ClientID int PK
Name varchar
}

Table B {
       varchar Luna PK
       int NumarI PK
       int ClientID FK  <---- Foreign key from table Client
       ... other colums
}

TABLE C {
       varchar Luna FK <---- Foreign key from table b
       int NumarI FK <---- Foreign key from table b
       ... other colums
}
    Client                A left join B  
ClientID Name          Month NumarI ClientID  DATA   Price
    1     X              1    123     4              3256
    2     Y              1    435     4              3277   
    3     Z              2    145     4              8781
    4     M              7    898     3              3271
                         4    587     2              1000
                         3    541     2              3267
                         2    658     3              9980
                         2    454     1              4877


    Result 

Name    DATA            Price
 M    29-01-2013        3277
 Z    8-02-2013        9980
 Y    15-03-2013       3267
 Y   18-04-2013         1000


 And so on. 

 The idea is that I have a lots of bills in every month of the year, I have to take the highest one by month( from the join of 
 table A with table B ) and then add the specific client name that buyed that bill. How you understand.

你在找这样的吗

SELECT z.an , z.luna , z.suma , z.ClientName 
FROM
(
    SELECT YEAR(d.Data) as an , MONTH(d.Data) as luna , suma , c.ClientName ,
        RANK() OVER(PARTITION BY MONTh(d.Data ), YEAR(d.Data) ORDER BY suma DESC) as [rank]
    FROM  TabelaB d
        join (
             SELECT d.NumarI , d.Luna ,sum(d1.Cantitate*d1.PretVinzare) as suma 
             FROM TabelaB d
                left outer join TabelaC d1 on d.Luna = d1.Luna and d.NumarI = d1.NumarI
             GROUP BY d.NumarI , d.Luna ) x on x.NumarI=d.NumarI and x.Luna = d.Luna
        join Client c on d.ClientID = c.ClientID
    WHERE YEar(d.Data) >=  2012 and Year(d.Data) <= 2015 ) z
WHERE z.[rank] = 1

如果在同一天有多张相同价格的账单,您仍然只需要一张账单-您可以用行号替换排名。

请编辑您的问题并显示示例数据和所需结果。请给出表格结构并解释字段……文件名与此不相关,我只需要知道如何根据其他表的条件从表中获取特定行。谢谢,这就是我要寻找的,很棒的查询!