Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Tsql_Sybase - Fatal编程技术网

Sql 返回多行';将列值设置为链接项的列

Sql 返回多行';将列值设置为链接项的列,sql,tsql,sybase,Sql,Tsql,Sybase,我有一个(简化的)表格,其结构如下: Table: ItemData PK | ScanCode | StoreFK | Retail | ReceiptAlias 1 | 100101 | 1 | 4.99 | Milk 4 | 100101 | 2 | 4.99 | Milk 7 | 100101 | 3 | 0.99 | Milk 2 | 100102 | 1 | 6.99 | Eggs 5 | 1

我有一个(简化的)表格,其结构如下:

Table: ItemData

PK | ScanCode | StoreFK | Retail | ReceiptAlias
1  | 100101   | 1       | 4.99   | Milk
4  | 100101   | 2       | 4.99   | Milk
7  | 100101   | 3       | 0.99   | Milk
2  | 100102   | 1       | 6.99   | Eggs
5  | 100102   | 2       | 6.99   | Eggs
8  | 100102   | 3       | 6.99   | Eggs
3  | 100103   | 1       | 7.99   | Bread
6  | 100103   | 2       | 8.99   | Bread
9  | 100103   | 3       | 9.99   | Bread
我可以使用以下SQL查询获得以下返回结果,其中显示了在一个或多个商店中具有不同零售的所有商品:

SQL查询:

SELECT   im.INV_ScanCode     AS ScanCode,
         name.ItemData AS im
GROUP BY ScanCode, Receipt_Alias
HAVING   COUNT(DISTINCT im.Retail) > 1
ORDER BY ScanCode
ScanCode | Receipt_Alias 
100101   | Milk
100103   | Bread
ScanCode | Receipt_Alias | Str_1 | Str_2 | Str_3
100101   | Milk          | 4.99  | 4.99  | 0.99
100103   | Bread         | 7.99  | 8.99  | 9.99
当前返回结果:

SELECT   im.INV_ScanCode     AS ScanCode,
         name.ItemData AS im
GROUP BY ScanCode, Receipt_Alias
HAVING   COUNT(DISTINCT im.Retail) > 1
ORDER BY ScanCode
ScanCode | Receipt_Alias 
100101   | Milk
100103   | Bread
ScanCode | Receipt_Alias | Str_1 | Str_2 | Str_3
100101   | Milk          | 4.99  | 4.99  | 0.99
100103   | Bread         | 7.99  | 8.99  | 9.99
我想退回在一个或多个门店有不同零售的所有商品和在每个门店的零售店

期望的返回结果:

SELECT   im.INV_ScanCode     AS ScanCode,
         name.ItemData AS im
GROUP BY ScanCode, Receipt_Alias
HAVING   COUNT(DISTINCT im.Retail) > 1
ORDER BY ScanCode
ScanCode | Receipt_Alias 
100101   | Milk
100103   | Bread
ScanCode | Receipt_Alias | Str_1 | Str_2 | Str_3
100101   | Milk          | 4.99  | 4.99  | 0.99
100103   | Bread         | 7.99  | 8.99  | 9.99
我将如何更改SQL查询以包括每个门店位置的零售

SELECT  ScanCode as ItemID,
        ReceiptAlias,
        MAX(CASE WHEN StoreFK = 1 THEN Retail ELSE NULL END) Store_1,
        MAX(CASE WHEN StoreFK = 2 THEN Retail ELSE NULL END) Store_2,
        MAX(CASE WHEN StoreFK = 3 THEN Retail ELSE NULL END) Store_3
FROM    ItemData
GROUP   BY ScanCode, ReceiptAlias
HAVING  COUNT(DISTINCT Retail) > 1

您希望将行转换为列(透视)。如果可能,您应该尝试在应用程序级别执行此操作。这将返回所有商品,而不仅仅是在一个或多个门店零售不同的商品。请参阅指向其他SO问题的链接。为了防止返回错误,我将
ELSE NULL END
更改为
ELSE 0 END
。我建议未来的读者也这样做!