Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
如何使用Django ORM创建交叉表SQL查询?_Sql_Django_Orm - Fatal编程技术网

如何使用Django ORM创建交叉表SQL查询?

如何使用Django ORM创建交叉表SQL查询?,sql,django,orm,Sql,Django,Orm,使用Django 1.1,如何使用ORM创建交叉表(透视表)SQL查询 更新: 以下是模型和输出要求: class Store(models.Model): name = models.CharField(max_length=255) ... class Order(models.Model): store = models.ForeignKey(Store, blank=True, null=True, related_name='orders') desc

使用Django 1.1,如何使用ORM创建交叉表(透视表)SQL查询

更新: 以下是模型和输出要求:

class Store(models.Model):
    name = models.CharField(max_length=255)
    ...

class Order(models.Model):
    store = models.ForeignKey(Store, blank=True, null=True, related_name='orders')
    description = models.CharField(_('Description'), max_length=255)
    quantity = models.IntegerField(blank=True, null=True)       
    type_detail = models.CharField(_('Type Detail'), max_length=255)
    slug = models.SlugField(blank=True)
    cost = models.DecimalField(_("Cost"), max_digits=14, decimal_places=2)
    modified = models.DateTimeField(_('modified'), auto_now=True)
当前视图显示的数据如下所示:

Store   | Type Detail  | Quantity 
----------------------------------
Walmart | Floor polish | 2        
Walmart | Tiles        | 1        
Walmart | Milk         | 4      
Another | Floor polish | 2        
Another | Tiles        | 1        
Another | Milk         | 4        
我希望以此为中心查看数据,如下所示:

Store   | Type Detail  | Quantity 
----------------------------------
Walmart | Floor polish | 2        
Walmart | Tiles        | 1        
Walmart | Milk         | 4      
Another | Floor polish | 2        
Another | Tiles        | 1        
Another | Milk         | 4        
对于一家商店,我需要知道数量

Store   | Floor polish  | Tiles | Milk
------------------------------------------------
Walmart | 2             | 1     | 4
Another | 2             | 1     | 4

我希望这能解释我需要什么。

您可以在模板中执行以下操作(假设您将行项目传递到模板,并且假设store.name是唯一属性):

{%按store.name将行\u项重新组合为store\u项%}
{存储区中的存储区项目%}
{{store.gropper}
{store.list%中项目的%s}
{{item.count}
{%endfor%}
{%endfor%}

如果所有商店都有相同的库存,这将起作用,否则您将需要填补视图中的空白(例如,为缺少的库存项目返回0)

不知道Django,但这里是简单的SQL

SELECT Store,
SUM(CASE WHEN Type_Detail = 'Floor polish' THEN Quantity ELSE 0 END) as 'Floor polish',
SUM(CASE WHEN Type_Detail = 'Tiles' THEN Quantity ELSE 0 END) as 'Tiles',
SUM(CASE WHEN Type_Detail = 'Milk' THEN Quantity ELSE 0 END) as 'Milk'
FROM Order
GROUP BY Store

正确的交叉表要求每个维度成员都有一个值。这是我编的(见下文)。您可以在Django模板中使用它,如doctext示例中所示。因此,您需要查询1)所有门店值,2)所有类型\详细信息值,以及3)每个门店的数量和类型\详细信息。然后将第三个查询的结果放入(store,type)=>quantity的字典中

类多维数据集(对象):
“”“Iterable稀疏多维数据集。迭代为每个维度成员提供一个项。”。
>>>蟒蛇=['eric','john','terry']
>>>奶酪=['limburg'、'feta'、'parmigiano']
>>>奶酪消费量={
('eric','limburg'):2,
(‘埃里克’,‘帕米吉亚诺’):4,
(“约翰”、“费塔”):5
}
>>>奶酪方=立方体(蟒蛇、奶酪)、奶酪消费量)
>>>对于python,python_cheeses in cheese_cube:
对于奶酪,在python_奶酪中的消费:
打印python、cheese、consumption或0
埃里克·林伯格2
埃里克·费塔0
埃里克·帕米吉亚诺4
约翰·林堡0
约翰·费塔5
约翰·帕米吉亚诺0
特里·林堡0
特里·费塔0
特里·帕米吉亚诺0
"""
定义初始化(自我、维度、事实、切片=无):
自我尺寸=尺寸
self.data\u dict=事实
self.slice=切片或()
定义(自我):
如果透镜(自切片)+1<透镜(自尺寸):
对于自身尺寸[len(自身切片)]中的项目:
屈服项,立方体(self.dimensions,self.data_dict,self.slice+(项,))
其他:
对于自身尺寸[len(自身切片)]中的项目:
收益项目,self.data_dict.get(self.slice+(项目),无)

您必须提供更多细节。你有什么模型,你想得到什么结果?这种方法的问题是你已经将列硬编码到了SQL中,所以如果添加了新类型,你必须更改SQL。