相关疑难解决方法(0)

SQL Server数据库与多个连接

在SQL Server 2005中使用什么更有效:PIVOT还是MULTIPLE JOIN?

例如,我使用两个连接获得此查询:

SELECT p.name, pc1.code as code1, pc2.code as code2
FROM product p
    INNER JOIN product_code pc1
    ON p.product_id=pc1.product_id AND pc1.type=1
    INNER JOIN product_code pc2
    ON p.product_id=pc2.product_id AND pc2.type=2
Run Code Online (Sandbox Code Playgroud)

我可以使用PIVOT做同样的事情:

SELECT name, [1] as code1, [2] as code2
FROM (
    SELECT p.name, pc.type, pc.code
    FROM product p
        INNER JOIN product_code pc
        ON p.product_id=pc.product_id
    WHERE pc.type IN (1,2)) prods1
PIVOT(
    MAX(code) FOR type IN ([1], [2])) prods2
Run Code Online (Sandbox Code Playgroud)

哪一个会更有效率?

sql-server performance pivot join sql-server-2005

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

获取ROWS作为列(SQL Server动态PIVOT查询)

我正在使用MS SQL 2008 R2,有三个表具有以下模式:

表1:包含每个工作人员的工作班次信息

CREATE TABLE workshift (
[ws_id] [bigint] NOT NULL,
[start_date] [datetime] NOT NULL,
[end_date] [datetime] NOT NULL,
[worker_id] [bigint] NOT NULL
)

INSERT INTO workshift VALUES (1, '2012-08-20 08:30:00', '2012-08-20 14:30:00', 1)
INSERT INTO workshift VALUES (2, '2012-08-20 14:30:00', '2012-08-20 22:30:00', 2)
Run Code Online (Sandbox Code Playgroud)

表2:包含货币面额

CREATE TABLE currency_denom (
[cd_id] [decimal](7, 2) NOT NULL,
[name] [nchar](100) NOT NULL
)

INSERT INTO currency_denom VALUES (1, '100.00')
INSERT INTO currency_denom VALUES (2, '50.00')
INSERT INTO currency_denom VALUES (3, '20.00')
INSERT …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server pivot

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

合计投票结果

我有一张选票,每个选民从 10 位不同的候选人中选出 3 票。第 1 票得 3 分,第 2 票得 2 分,第 3 票得 1 分。

我有以下 SQL 查询来计算从每张投票中获得的总分(因此将投票 1、2 和 3 的结果分开)。

我需要做的是将所有这些结果放在一个表中,但我不太确定从哪里开始。

SELECT cn.cand_name, (count(vote_1) * 3) as vote_1 FROM candidate_votes cv Inner Join candidate_names cn ON cv.vote_1 = cn.cand_number GROUP BY cand_name;

SELECT cn.cand_name, (count(vote_2) * 2) as vote_2 FROM candidate_votes cv Inner Join candidate_names cn ON cv.vote_2 = cn.cand_number GROUP BY cand_name;

SELECT cn.cand_name, (count(vote_3) * 1) as vote_3 FROM candidate_votes cv Inner Join candidate_names …
Run Code Online (Sandbox Code Playgroud)

sql-server count

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

使用GROUP BY的mysql数据透视查询结果

我有一个数据表,我想导出到CSV.理想情况下,我想切换行和列,以便将数据分组得更好.

为了进一步解释,目前,数据库看起来像这样.

data_id     data_timestamp         data_value    
--------------------------------------------
1           2011-07-07 00:01:00    0.400  
1           2011-07-07 00:02:00    0.500
1           2011-07-07 00:03:00    0.600
1           2011-07-07 00:04:00    0.700
2           2011-07-07 00:01:00    0.100  
2           2011-07-07 00:02:00    0.200
2           2011-07-07 00:03:00    0.250
2           2011-07-07 00:04:00    2.300
Run Code Online (Sandbox Code Playgroud)

我想要做的是将data_value按data_timestamp值分组,以便对时间戳进行分组,并且每个data_id的每个data_value都显示在一列中,而不是一行中.

data_timestamp         input_1    input_2     
--------------------------------------------
2011-07-07 00:01:00    0.400      0.100  
2011-07-07 00:02:00    0.500      0.200
2011-07-07 00:03:00    0.600      0.250
2011-07-07 00:04:00    0.700      2.300
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的查询...

SELECT d.data_timestamp, d.input_1, d.input_2
FROM (
    SELECT data_timestamp,
    IF(data_id=1,data_value,NULL) AS 'input_1',
    IF(data_id=2,data_value,NULL) AS 'input_2' FROM data
) AS d ORDER …
Run Code Online (Sandbox Code Playgroud)

mysql csv pivot

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

标签 统计

pivot ×3

sql-server ×3

count ×1

csv ×1

join ×1

mysql ×1

performance ×1

sql-server-2005 ×1

t-sql ×1