Pivot был тем, как я справлялся с этим, в конечном итоге работая над ошибкой после ошибки. T / SQL бросил несколько ключей на моем пути. Я сначала Pivoted Query 2
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(PivotQ.Abbreviation)
from ( --QUERY2
) PivotQ
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT StepNumber + ''-'' + QuestionNum as QuestionNumber, '+@cols+' from
(
--Query2
) x
pivot
(
SUM(Answer)
for Abbreviation in (' + @cols + ')
) p
'
Затем я использовал QuestionNumber в качестве ключа для присоединения к QuestionNumber MainTable. Я использовал второй @cols, чтобы сделать столбцы для использования во втором запросе
select @cols2 = STUFF((SELECT distinct ', PivotJoin.' + QUOTENAME(PivotQ.Abbreviation)
from ( --QUERY2
) PivotQ
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
'+ @cols2 +' --added into Select of MainTable
-- Added to From Statement
inner join
('+ @query +') PivotJoin on PivotJoin.QuestionNumber = Section.StepNumber + ''-'' + Question.QuestionNumber
Мне пришлось сделать номер вопроса Pivot основным, потому что теперь его T / SQL вместо чистого SQL с использованием псевдонима в группе перестали работать. Затем я добавил @ cols2 в предложение Group By. и сделал его заказ по PivotJoin.QuestionNumber вместо.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let productData = trendingProductsDataArray[indexPath.row]
let cell = trendingProductCV.dequeueReusableCell(withReuseIdentifier: "TrendingProductsCVCell", for: indexPath) as? TrendingProductsCVCell
cell?.trendingProductImage.downloadImages(url: productData.images![0].source!)
cell?.trendingProducttitle.text = productData.title
cell?.trendingProductSellingPrice.text = productData.salePrice
cell?.struckTest(unstruckedText: productData.regularPrice!)
cell?.trendingAddToCartBtn.addTarget(self, action: #selector(addToCartBtnTapped(sender:)), for:.touchUpInside)
return cell!
}
@objc func addToCartBtnTapped(sender:UIButton) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tblUsers)
let indexPath = self.tblUsers.indexPathForRow(at: buttonPosition)
let productData = trendingProductsDataArray[indexPath.row]
}
Попробуйте это
вы можете определить протокол на collectionViewCell
и запустить его, когда кнопка addToCard
нажмет на каждую ячейку, и в вашем viewController
орудии делегата:
protocol CollectionViewCellDelegate: class {
func addtoCard(_ cell: TrendingProductsCVCell)
}
class TrendingProductsCVCell: UITableViewCell {
weak var delegate: CollectionViewCellDelegate?
// ... the rest of your code
@IBAction func addToCardButtonClicked(_ sender: UIButton) { //action of ***addToCard***
delegate?.addToCard(self)
}
}
class viewController: CollectionViewCellDelegate { //and what you want to implement
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = trendingProductCV.dequeueReusableCell(withReuseIdentifier: "TrendingProductsCVCell", for: indexPath) as? TrendingProductsCVCell
cell.delegate = self
// ... the rest of your code
return cell
}
func addToCard(cell: TrendingProductsCVCell) {
//do what you want with your cell and its content
}
}