Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 行在其自己的列中,具体取决于它们的值_Sql_Select - Fatal编程技术网

Sql 行在其自己的列中,具体取决于它们的值

Sql 行在其自己的列中,具体取决于它们的值,sql,select,Sql,Select,我有一个select查询,当前生成以下结果: 使用以下查询: SELECT DISTINCT np.Description, p.promotionalCode, p.Price FROM Price AS p INNER JOIN nProduct AS np ON p.nProduct = np.Id 我想提出以下几点: Description A B C Product 1 5 4 2 下面是一个

我有一个select查询,当前生成以下结果:

使用以下查询:

SELECT DISTINCT np.Description, p.promotionalCode, p.Price
FROM            Price AS p INNER JOIN
                         nProduct AS np ON p.nProduct = np.Id
我想提出以下几点:

Description  A  B  C
 Product 1   5  4  2
下面是一个简单的测试示例:

DECLARE @temp TABLE (
    id INT,
    description varchar(50),
    promotionalCode char(1),
    Price smallmoney
)

INSERT INTO @temp
select 1, 'Product 1', 'A', 5
    union
SELECT 1, 'Product 1',  'B', 4
    union
SELECT 1, 'Product 1', 'C', 2



SELECT
    id,
    description,
    MIN(Case promotionalCode WHEN 'A' THEN Price ELSE NULL END) AS 'A',
    MIN(Case promotionalCode WHEN 'B' THEN Price ELSE NULL END) AS 'B',
    MIN(Case promotionalCode WHEN 'C' THEN Price ELSE NULL END) AS 'C'
FROM
     @temp
GROUP BY 
    id,
    description

Duckworth的回答很好。如果可以为每个单元格获取多个值,则可能需要使用AVG或SUM而不是MIN,具体取决于您希望看到的内容


如果您的DBMS支持它,您可能还需要查看交叉表查询或透视查询。例如,MS Access具有交叉表查询。

如果您使用的是SQL Server 2005,则可以使用新的PIVOT操作符

简单透视-客户为单个产品下的订单数量

简单订单表的结构:

CREATE TABLE Sales.[Order]
    (Customer varchar(8), Product varchar(5), Quantity int)
SELECT *
    FROM Sales.[Order]
    PIVOT (SUM(Quantity) FOR Product IN ([Bike],[Chain])) AS PVT
该表包含以下值:

Customer Product Quantity
    Mike     Bike    3
    Mike     Chain   2
    Mike     Bike    5
    Lisa     Bike    3
    Lisa     Chain   3
    Lisa     Chain   4
例如:订单表上的透视操作:

CREATE TABLE Sales.[Order]
    (Customer varchar(8), Product varchar(5), Quantity int)
SELECT *
    FROM Sales.[Order]
    PIVOT (SUM(Quantity) FOR Product IN ([Bike],[Chain])) AS PVT
此查询的预期输出为:

Customer Bike Chain
Lisa        3    7
Mike        8    2

如果您不使用SQL Server,您可能会搜索数据库的pivot。

您使用的是哪种数据库产品?您需要知道值是A、B和C。如果有许多促销代码,则此SQL将很难维护。提问者正在从数据库中检索这些值。