【问题标题】:get data from same table in sql using join使用join从sql中的同一张表中获取数据
【发布时间】:2020-04-16 18:39:55
【问题描述】:

我有一个表 [dbo].[UserImages],其中用户每 6 天上传一次照片,用户 3 共有 18 条记录。第 1 天有 9 条记录,第 6 天有 9 条记录。此表中有 4 列 [Id, UserId, Image, Day]

Id  UserId  Image               Day
1   3       3_20200408_1.png    1
2   3       3_20200408_2.png    1
3   3       3_20200408_3.png    1
4   3       3_20200408_4.png    1
5   3       3_20200408_5.png    1
6   3       3_20200408_6.png    1
7   3       3_20200408_7.png    1
8   3       3_20200408_8.png    1
9   3       3_20200408_9.png    1
10  3       3_20200410_9.png    6
11  3       3_20200410_2.png    6
12  3       3_20200410_3.png    6
13  3       3_20200410_4.png    6
14  3       3_20200410_5.png    6
15  3       3_20200410_6.png    6
16  3       3_20200410_7.png    6
17  3       3_20200410_8.png    6
18  3       3_20200410_9.png    6

我需要这样的东西

ImgCount UserId ImageDay1 ImageDay6 1 3 3_20200408_1.png 3_20200408_1.png 2 3 3_20200408_2.png 3_20200408_2.png 3 3 3_20200408_3.png 3_20200408_3.png 4 3 3_20200408_4.png 3_20200408_4.png 5 3 3_20200408_5.png 3_20200408_5.png 6 3 3_20200408_6.png 3_20200408_6.png 7 3 3_20200408_7.png 3_20200408_7.png 8 3 3_20200408_8.png 3_20200408_8.png 9 3 3_20200408_9.png 3_20200408_9.png

我该怎么办

【问题讨论】:

标签: sql sql-server tsql group-by pivot


【解决方案1】:

您可以使用row_number() 和聚合:

select
    imgCount,
    userId,
    max(case when day = 1 then image end) ImageDay1,
    max(case when day = 6 then image end) ImageDay6
from (
    select t.*, row_number() over(partition by userId, day order by image) imgCount
    from mytable t
    where day in (1, 6)
) t
group by userId, imgCount
order by ImgCount

Demo on DB Fiddle

图像计数 |用户名 | ImageDay1 | ImageDay6 :------- | -----: | :--------------- | :--------------- 1 | 3 | 3_20200408_1.png | 3_20200410_1.png 2 | 3 | 3_20200408_2.png | 3_20200410_2.png 3 | 3 | 3_20200408_3.png | 3_20200410_3.png 4 | 3 | 3_20200408_4.png | 3_20200410_4.png 5 | 3 | 3_20200408_5.png | 3_20200410_5.png 6 | 3 | 3_20200408_6.png | 3_20200410_6.png 7 | 3 | 3_20200408_7.png | 3_20200410_7.png 8 | 3 | 3_20200408_8.png | 3_20200410_8.png 9 | 3 | 3_20200408_9.png | 3_20200410_9.png

【讨论】:

  • 它返回所有 18 条记录
  • @arvind 以上查询返回您期望的方式。在这里查看sqlfiddle.com/#!18/671d9/13
  • @arvind:这按预期工作。我在我的答案中添加了一个小提琴供您参考。
猜你喜欢
  • 2018-01-20
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2020-02-16
相关资源
最近更新 更多