相关疑难解决方法(0)

使用SQL Server中的"Pivot"将行转换为列

我已经阅读了MS数据透视表上的内容,但我仍然遇到问题.

我有一个正在创建的临时表,我们会说第1列是商店号,第2列是周数,最后第3列是某种类型的总和.周数也是动态的,商店数是静态的.

Store      Week     xCount
-------    ----     ------
102        1        96
101        1        138
105        1        37
109        1        59
101        2        282
102        2        212
105        2        78
109        2        97
105        3        60
102        3        123
101        3        220
109        3        87
Run Code Online (Sandbox Code Playgroud)

我希望它作为一个数据透视表出来,像这样:

Store        1          2          3        4        5        6....
----- 
101        138        282        220
102         96        212        123
105         37        
109
Run Code Online (Sandbox Code Playgroud)

将数字存储在侧面,将数字存储在顶部.

sql sql-server pivot pivot-table

271
推荐指数
6
解决办法
79万
查看次数

子查询中的Order By的SQL错误

我正在使用SQL Server 2005.

我的查询是:

SELECT (
  SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay
Run Code Online (Sandbox Code Playgroud)

而错误:

除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.

如何ORDER BY在子查询中使用?

sql-server sql-order-by

63
推荐指数
5
解决办法
16万
查看次数

动态创建列sql

我有一张顾客表

Customer ID        Name         
   1               John        
   2               Lewis        
   3               Mary         
Run Code Online (Sandbox Code Playgroud)

我有另一张表CustomerRewards

 TypeID           Description
   1                Bronze
   2                Silver
   3                Gold
   4               Platinum
   5               AnotherOne
Run Code Online (Sandbox Code Playgroud)

决赛桌

 RewardID          TypeID          CustomerID
    1                1                 1
    2                1                 1
    3                2                 1
    4                2                 2
Run Code Online (Sandbox Code Playgroud)

customerTypes表是动态的,可以添加和删除许多这些类型.基本上我想要的是动态生成的列和每个列中的计数,类似于

CustomerName        Bronze        Silver     Gold      Platinum     AnotherOne    total
   John               2             1         0           0             0           3
   Lewis              0             1         0           0             0           1
 Grand TOTAL          2             2         0           0             0           4
Run Code Online (Sandbox Code Playgroud)

问题就像我说的那样,类型是动态的,客户是动态的,所以我需要根据系统中的类型使列成为动态的

我已经在DataGridView中标记了c#,因为我需要它

提前致谢

sql t-sql sql-server pivot dynamic-pivot

29
推荐指数
1
解决办法
5万
查看次数

SQL Server - 动态PIVOT表 - SQL注入

很抱歉这个问题很长,但是这里包含了我用来测试场景的所有SQL,希望能够清楚地说明我在做什么.

我在SQL Server 2005中构建了一些动态SQL来生成PIVOT表.

下面是执行此操作的代码.使用各种选择显示原始数据使用GROUP BY的值和PIVOT中的值,我想要它们.

BEGIN TRAN
--Create the table
CREATE TABLE #PivotTest
(
    ColumnA nvarchar(500),
    ColumnB nvarchar(500),
    ColumnC int
)

--Populate the data
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 1)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 2)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Z', 3)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 4)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 5)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('B', 'Z', 6)
INSERT …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot sql-injection sql-server-2005 dynamic-pivot

17
推荐指数
1
解决办法
2万
查看次数

从长到宽 - SQL

我有一张很长的桌子(例如)

    Date        Person    Number
    2015-01-03  A         4
    2015-01-04  A         2
    2015-01-05  A         3
    2015-01-03  B         5
    2015-01-04  B         6
    2015-01-05  B         7
    2015-01-03  C         1
    2015-01-04  C         3
    2015-01-05  C         4
    2015-01-05  D         4
    2015-01-04  E         1
    2015-01-05  E         3
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像(宽):

    Date          A    B    C    D    E
    2015-01-03    4    5    1    0    0
    2015-01-04    2    6    3    0    1
    2015-01-05    3    7    4    4    3
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。我正在使用交易。谢谢。

t-sql sql-server

11
推荐指数
2
解决办法
2万
查看次数

如何转动?如何将多行转换为多列的一行?

我有两张桌子要结合.第一个表是客户端,另一个是产品.目前我有22个产品,但我希望有一个灵活的数据库设计,所以在产品数据库中没有22列,每个客户每个产品有1行,所以如果我添加或删除1个产品,我不会必须改变数据库结构.

我想要一个select语句,我为每个客户选择所有产品,输出应该在一行中,每个产品都有一列.

我已经看到了一些类似的其他问题,但目标是将所有行连接在一列中 - 这是我不想要的.

假设有2个客户和3个产品.

表客户端:

ClientId | ClientName
---------------------
 1       | Name1
 2       | Name2
Run Code Online (Sandbox Code Playgroud)

表产品

ProductId | ClientId | Product
-------------------------------------
 1        |   1      |  SomeproductA
 2        |   1      |  SomeproductB
 3        |   1      |  SomeproductA
 4        |   2      |  SomeproductC
 5        |   2      |  SomeproductD
 6        |   2      |  SomeproductA
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

表输出:

 ClientId | ClientName | Product1     | Product 2    | Product 3
 -------------------------------------------------------------------
     1    | Name1      | SomeproductA | SomeproductB | SomeproductA
     2    | Name2 …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-server pivot-table

9
推荐指数
1
解决办法
2万
查看次数

使用Sql查询以格式化方式获取用户数据

我需要在报告中显示格式化数据.我使用三个表,其中一个添加新用户,第二个用于付款,最后一个用于任何用户辞职.以下是示例表和默认数据:

CREATE TABLE [dbo].[Entry]
(
    [EmpId] [int] IDENTITY(1,1) NOT NULL,
    [EmpName] [nvarchar](40) NULL,
    [Address] [nvarchar](100) NULL,
    [Email] [nvarchar](20) NULL,
    [EntryDate] [datetime] NULL
)

INSERT [dbo].[Entry] ([EmpId], [EmpName], [Address], [Email], [EntryDate]) 
VALUES (1, N'John', N'On Earth', N'john@abc.com', CAST(0x0000A58000000000 AS DateTime)),
       (2, N'Jack', N'On Earth', N'jack@abc.com', CAST(0x0000A5A800000000 AS DateTime)),
       (3, N'Jessi', N'On Earth', N'jessi@abc.com', CAST(0x0000A5CF00000000 AS DateTime)),
       (4, N'Jackson', N'On Earth', N'jackson@abc.com', CAST(0x0000A5E400000000 AS DateTime))

CREATE TABLE [dbo].[Payment]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [EmpId] [int] NULL,
    [Payment] [float] NULL,
    [PayDate] [datetime] …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008 reporting-services

8
推荐指数
1
解决办法
154
查看次数

SQL Server 动态透视列名称

由于我的应用程序的需要,我必须将查询的列名称作为第一行返回。现在我必须对这个结果进行 PIVOT,以便将其与我的结果集进行 UNION,但困难的部分是:它必须是动态的,因此如果我向该表添加新列,SELECT 会将所有名称进行透视。

以下 SELECT 为我带来了列名称:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Codes'
ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION 
Run Code Online (Sandbox Code Playgroud)

我的结果集是:

COLUMN_NAME
Id
CodeName
Country
StartDate
EndDate 
Run Code Online (Sandbox Code Playgroud)

我期望的是:

Id    CodeName    Country    StartDate    EndDate (... whatever other columns I might have)
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点,而无需对列名称进行硬编码?

先感谢您!

sql-server pivot-table

7
推荐指数
1
解决办法
2万
查看次数

如何迭代填充临时表并将结果填充()到列中?

如果我想知道每个用户在某一天在内联网上花了多少时间,我可以使用自定义功能 - 2个示例:

select * from [dbo].[usertime]('2016-04-08')

userid  totaltime
-----------------
1       4430
2       11043
5       13045


select * from [dbo].[usertime]('2016-04-09')

userid  totaltime
-----------------
1       345
3       12066
9       15344
Run Code Online (Sandbox Code Playgroud)

我无法控制该功能,只能使用其输出.在totaltime以秒为单位.

从另一张表中,我可以选择一年中的日期:

select * from dates;

date
----------
2016-01-01
...
2016-04-08
2016-04-09
Run Code Online (Sandbox Code Playgroud)

我想运行自定义函数usertime为每个datedates表和结果存储在一个临时表,如下所示:

userid  2016-01-01  ..  2016-04-08  2016-04-09
----------------------------------------------
1       ..              4430        345
2       ..              11043       0
3       ..              0           12066
5       ..              13045       0
9       ..              0           15344
Run Code Online (Sandbox Code Playgroud)

这需要我调用usertime一个循环,伪:

create …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

6
推荐指数
1
解决办法
637
查看次数

如何获取与另一外部参照列中的任何值相关的一个外部参照列的不同组合

我需要选择 XRef 表中 B 列的唯一值组合的计数,该表按 A 列分组。

考虑以下架构和数据,它表示一个简单的家庭结构。每个孩子都有父亲和母亲:

表父亲

父亲ID 姓名
1 亚历克斯
2 鲍勃

表妈妈

母亲ID 姓名
1 爱丽丝
2 芭芭拉

表儿童

儿童ID 父亲ID 母亲ID 姓名
1 1(亚历克斯) 1(爱丽丝) 亚当
2 1(亚历克斯) 1(爱丽丝) 比利
3 1(亚历克斯) 2(芭芭拉) 席琳
4 2(鲍勃) 2(芭芭拉) 德里克

每个父亲的母亲的不同组合是:

  • 亚历克斯(爱丽丝、芭芭拉)
  • 鲍勃(芭芭拉饰)

总的来说,母亲有两种不同的组合

  1. 爱丽丝、芭芭拉
  2. 芭芭拉

我想编写的查询将返回母亲的这些不同组合的计数,无论它们与哪个父亲相关联

独特的母亲团体
2

我能够使用 STRING_AGG 函数成功完成此操作,但感觉很笨拙。它还需要操作数百万行,并且目前速度相当慢。有没有更惯用的方法来代替集合操作来做到这一点?

这是我的工作示例:

-- Drop pre-existing tables

DROP TABLE IF EXISTS dbo.Child;

DROP TABLE IF EXISTS dbo.Father;

DROP TABLE IF EXISTS dbo.Mother;

-- …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

6
推荐指数
1
解决办法
260
查看次数