当前位置: 首页 > 面试题库 >

枢轴的SQL唯一值编号顺序

松铭
2023-03-14
问题内容

为了报告目的,我需要透视每个记录上唯一的查询结果。我当前的声明是:

SELECT *
FROM Sales AS x
WHERE (select count(*) from Sales where customer_name=x.customer_name 
        and order_date>=x.order_date)<=5
ORDER BY customer_name, order_date, price;

查询输出的示例是:

customer_name    order_date        price
Company A        2009-02-01        800 
Company A        2009-03-01        100
Company A        2009-04-01        200
Company A        2009-05-01        300
Company A        2009-06-01        500
Company B        2009-02-01        100
Company B        2009-02-01        800
Company B        2009-04-01        200
Company B        2009-05-01        300
Company B        2009-06-01        500

最终,信息需要看起来像这样:

Customer_Name     order_date1  price1    order_date2  price2    order_date3  price3    order_date4  price4    order_date5  price5   
Company A         2009-02-01   800       2009-03-01   100       2009-04-01   200       2009-05-01   300       2009-06-01   500
Company B         2009-02-01   100       2009-02-01   800       2009-04-01   200       2009-05-01   300       2009-06-01   500

我在想我需要为“ pivot_id”添加一列,以便每个分组都有一个共同的记录,因此在数据透视之前的查询结果将如下所示:

pivot_id  customer_name    order_date        price
1         Company A        2009-02-01        800 
2         Company A        2009-03-01        100
3         Company A        2009-04-01        200
4         Company A        2009-05-01        300
5         Company A        2009-06-01        500
1         Company B        2009-02-01        100
2         Company B        2009-02-01        800
3         Company B        2009-04-01        200
4         Company B        2009-05-01        300
5         Company B        2009-06-01        500

哪种SQL语句将为每次购买生成一个自动记录号,而且还会从每个customer_name重新开始?

使用SQL代码生成器在Access 2007中工作。如果解决方案与Access兼容,那就太好了。

抱歉,长度不够。提前致谢。


问题答案:

另一个相关的子查询怎么样?将您的查询保存为Query1(您可能希望ORDER BY从此中间Query中删除该子句-只需对最终结果集进行排序):

SELECT Q1.customer_name, Q1.order_date, Q1.price, 
       (
        SELECT COUNT(*) + 1
          FROM MyQuery AS Q2
         WHERE Q2.customer_name = Q1.customer_name
               AND Q2.order_date < Q1.order_date
       ) AS pivot_id
  FROM MyQuery AS Q1;


 类似资料:
  • 问题内容: 我有一个简单的查询,像这样。 一个简单的枢轴给了我 给我 但是数据透视查询中的值是硬编码。我想从子查询中获取这些值。 但是,pivot不允许我从子查询中获取值,除了编写动态生成的查询之外,还有其他方法可以执行此操作吗? 问题答案: 不能。只能使用动态查询来完成。我真的很想知道是否有办法。

  • 问题内容: 好吧,我有一张看起来像这样的表 现在,我需要将其转换为: 我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。 有人可以帮忙吗? 问题答案: 看下面的例子

  • 问题内容: 如何执行枢纽功能 我有一张有数据的表 但我需要的格式为 这样。 如何执行数据透视功能以这种格式获取。 请帮帮我........ 我用过我的查询 结果显示为 但在这里我也有3个星期一的记录,而不是一个星期一的记录… 如何获得每天1天的一个记录…? 问题答案: 试试这个: PIVOT运算符未“消耗”的任何列将保留在最终结果集中,从而增加了基数。

  • 我想在按“prop”分组后,根据“井”的值生成列well_rep。 类似于cur_group_id,但是数字在不同的组中从1开始?

  • 问题内容: 我有这个查询 有什么方法可以替换 为(空字符串)吗?( 无需 修改CTE数据!) 问题答案: 使用: 输出: