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

当4个查询的数据不唯一时,如何将4个查询的数据插入到一个表中?

法兴德
2023-03-14
问题内容

更清楚地说,我有这类数据。

查询1)2016年数据

Item       Price        Quantity

Shoe        20             10
Shoe        30             15
Cups        10             30
Towels      30             20
Towels      25             20
Towels      20             20

查询2)2017年的数据

Item       Price        Quantity

Shoe        40             30
Shoe        50             20
Towels      30             30
Towels      20             30

查询3)2018年的数据

Item       Price        Quantity

Shoe        20             10
Cups        10             30
Towels      30             20
Towels      25             20
Towels      20             20

查询1)2019年的数据

Item       Price        Quantity

Shoe        20             10
Shoe        30             15
Cups        10             30
Towels      30             20
Towels      25             20
Towels      20             20

我想要这样的结果:

Item   Price2016   Quantity2016   Price2017   Quantity2017  Price2018   Quantity2018   Price2019   Quantity2019

Shoe      20           10            40            30          20          10             20            10
Shoe      30           15            50            20                                     30            15

我尝试使用JoinsUnions甚至创建Temp Tablescursor

例如,inner Join产生以下结果:

Item       Price2016        Quantity 2016       Price2017        Quantity 2017 ...

Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10
Shoe          20                 10                20               10

请注意,本例中的数据是不准确的,但结果与此类似。

任何想法我如何使用获得我的首选结果 SQL

编辑:我从中获取数据的查询是

select Item, Price, sum(quantity) as quantity from Sales where year(itemsold) = 2016 group by Item, price

我只是更改年份以获取其他数据。


问题答案:

我已经看到了上面的解决方案,它也是有效的,但是您也可以尝试使用
。我已经为您创建了一个演示,请同时检查此解决方案,它可能会对您有所帮助。

演示

十进制表和插入记录

DECLARE @Table2016 AS TABLE ( Item VARCHAR(50), Price FLOAT, Quantity INT ); 
DECLARE @Table2017 AS TABLE ( Item VARCHAR(50), Price FLOAT, Quantity INT ); 
DECLARE @Table2018 AS TABLE ( Item VARCHAR(50), Price FLOAT, Quantity INT );
DECLARE @Table2019 AS TABLE ( Item VARCHAR(50), Price FLOAT, Quantity INT );

INSERT INTO @Table2016 (Item,Price,Quantity) VALUES
('Shoe'  ,20,10),
('Shoe'  ,30,15),
('Cups' ,10,30),
('Towels',30,20),
('Towels',25,20),
('Towels',20,20)

INSERT INTO @Table2017 (Item,Price,Quantity) VALUES
('Shoe'  ,40,30),
('Shoe'  ,50,20),
('Towels',30,30),
('Towels',20,30)

INSERT INTO @Table2018 (Item,Price,Quantity) VALUES
('Shoe'  ,20,10),
('Cups'  ,10,30),
('Towels',30,20),
('Towels',25,20),
('Towels',20,20)

INSERT INTO @Table2019 (Item,Price,Quantity) VALUES
('Shoe'  ,20,10),
('Shoe'  ,30,15),
('Cups'  ,10,30),
('Towels',30,20),
('Towels',25,20),
('Towels',20,20)

标记所有表并插入到温度表中

    SELECT Item,Price,Quantity,PriceYear,QuantityYear INTO TempFinal
    FROM (
    SELECT Item,Price,Quantity, 'Price2016' as PriceYear,'Quantity2016' as QuantityYear FROM @Table2016
    UNION ALL                                      
    SELECT Item,Price,Quantity, 'Price2017' as PriceYear,'Quantity2017' as QuantityYear FROM @Table2017
    UNION ALL                                      
    SELECT Item,Price,Quantity, 'Price2018' as PriceYear,'Quantity2018' as QuantityYear FROM @Table2018
    UNION ALL                                      
    SELECT Item,Price,Quantity, 'Price2019' as PriceYear,'Quantity2019' as QuantityYear FROM @Table2019
    ) MyTables

没有GROUPBY的查询

    SELECT item, [Price2016],[Quantity2016],[Price2017],[Quantity2017],[Price2018],[Quantity2018],[Price2019],[Quantity2019]
    FROM (
    SELECT item,Price,Quantity,PriceYear,QuantityYear
    FROM TempFinal) up
    PIVOT (SUM(Quantity) FOR QuantityYear IN ([Quantity2016],[Quantity2017],[Quantity2018],[Quantity2019])) AS pvt
    PIVOT (SUM(Price) FOR PriceYear IN ([Price2016],[Price2017],[Price2018],[Price2019])) AS pvt2
    ORDER BY item

与GROUPBY查询

     SELECT item, SUM([Price2016])[Price2016],SUM([Quantity2016])[Quantity2016],SUM([Price2017])[Price2017],SUM([Quantity2017])[Quantity2017],SUM([Price2018])[Price2018],SUM([Quantity2018])[Quantity2018],SUM([Price2019])[Price2019],SUM([Quantity2019])[Quantity2019]
    FROM (
    SELECT item,Price,Quantity,PriceYear,QuantityYear
    FROM TempFinal) up
    PIVOT (SUM(Quantity) FOR QuantityYear IN ([Quantity2016],[Quantity2017],[Quantity2018],[Quantity2019])) AS pvt
    PIVOT (SUM(Price) FOR PriceYear IN ([Price2016],[Price2017],[Price2018],[Price2019])) AS pvt2
    GROUP by item
    ORDER BY item

下降温度表

DROP TABLE TempFinal


 类似资料:
  • 我有两个表:< code>person_concern和< code>person。它们都有一个< code >代码列,而< code>person有一个< code>dept列。我想从< code>person_concern表中选择数据,其中< code>person表中的< code>dept列= 30。 基本上,表的每一行都有不同的代码,然后将该人员放入一个部门。因此,我可以在表中使用相同

  • 问题内容: 我寻求帮助的以下问题:我有两个表 列,, 列,,, 我想将数据从(仅列)复制到(到列)。该均在表中相同(有重复项的ID),所以这就是我要复制到新表,并保持在一个单一的行中的所有数量与每个位置为一列的原因。我正在使用以下查询,但它不起作用 问题答案: 如果为空,请尝试以下插入语句: 如果已经包含值,请尝试以下更新语句:

  • 问题内容: 我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。 例如,我有此表: 我需要查询一个结果: 1.名为“约翰”的人数 2.年龄超过30岁的“约翰”的人数。 我可以通过这种方式对子查询进行操作(这只是示例): 但这非常慢,我正在寻找更快的方法。 与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数? 问题答案: 使用CASE语句,您

  • 我正在和其他同学完成一个项目,我们被卡住了。在我们的登录servlet中,我们连接到数据库并检索与电子邮件匹配的数据 我们需要这样传递信息:数据库--- 谢谢 LogInServlet 配置文件Servlet 配置文件HTML

  • 问题内容: 我正在将数据有问题地插入表中。当我从另一个表执行此操作时,它很快,但如果有很多记录,则只会非常缓慢地放慢速度。即使那样,也只需要几秒钟。 当我从查询插入到表时,它需要花费几分钟的时间-大约每插入1000条记录需要一分钟。 源查询本身仅作为选择查询运行时,可能需要1-2秒。查询是否针对插入的每个记录运行?我希望它会在整个数据集中运行一次。还是有其他原因导致该函数与从另一个表插入“平面”数

  • 问题内容: 我有2个不同的表,但各列的命名略有不同。我想从一个表中获取信息,然后将其放入另一个表中。仅当表1中的“信息字段”不为null时,才需要将表1中的信息放入表2中。表2在创建任何东西时都有一个唯一的ID,因此插入的任何东西都需要获得下一个可用的ID号。 表格1 表2 问题答案: 这应该工作。您无需担心Table2中的identify字段。