

次の二つのテーブルがあります。

[code]

    TABLE1
    　myid
    　name
    
    TABLE2
    　id
      myid
    　count
    
[/code]

TABLE1レコードが1つ、それに関連するTABLE2が3つ格納されているとします。

[code]

    TABLE1
    　myid = 1
      name = 太郎
    
    TABLE2
    　id = 1
      myid = 1
    　count = 2
    
    　id = 2
      myid = 1
    　count = 3
    
    　id = 3
      myid = 1
    　count = 1
    
[/code]

ここで、TABLE1とそれに関連するTABLE2レコードを全て取り出し、かつその一番上の行だけを結果として取得したいです。ただし、countの結果だけは三つのレコードの合計値を出したいです。

どのようなSQL文を書けばいいでしょうか？

望む取得結果は次のモノになります。

[code]

    myid name id count
    1    太郎　1  6
    
[/code]


CC BY-SA 3.0
2016-01-27T05:13:56.940
21365
2016-01-27T09:28:52.220
2016-01-27T08:23:00.427
76
14151
question
sql database
複数テーブルから一番上の行だけ取り出し、かつ特定列は合計値にしたい


select TABLE1.*, TABLE2.id, (select sum(count) from TABLE2 where TABLE2
.myid=TABLE1.myid) from TABLE1 inner join TABLE2 using (myid) order by myid
asc limit 1;

ですかね？  
試してないです


CC BY-SA 3.0
2016-01-27T05:47:40.783
21366
2016-01-27T05:47:40.783
10346
21365
answer


グループ化してそれぞれの集計関数を使うだけです。ただし、SQLにおいて「一番上の行」という概念はないので、`MIN`など別の条件付けが必要です。

[code]

    SELECT TABLE1.myid, name, id, count
    FROM TABLE1 INNER JOIN (SELECT myid, MIN(id) AS id, SUM(count) AS count
                            FROM TABLE2 GROUP BY myid) AS t ON TABLE1.myid = t.myid
    
[/code]

とか。


CC BY-SA 3.0
2016-01-27T07:34:03.500
21373
2016-01-27T07:34:03.500
4236
21365
answer

[code]

    declare @id smallint
    set @id = 1
    select top 1
        t1.myid
        ,t1.name
        ,t2.myid
        ,(select sum(t2.count) from table2 t2 where t2.myid = @id)
         as 'count_sum' 
    from table1 t1
    where t1.myid = @id
    group by 
        t1.myid
        ,t1.name
    order by 
        t1.myid
    
[/code]

こんな感じでどうでしょう？  
ゴリ押しなので、あまりいい例ではありませんが・・・


CC BY-SA 3.0
2016-01-27T09:08:37.913
21379
2016-01-27T09:28:52.220
2016-01-27T09:28:52.220
7501
7501
21365
answer