更清楚地说,我有这类数据。
查询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
我尝试使用Joins
,Unions
甚至创建Temp Tables
或cursor
例如,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字段。