我有这张桌子:
WeekID ISModelled ProductID Units Value
1 MODEL 123 0 0
2 EPOS 123 0 0
2 MODEL 123 100 50
3 IMPUTE 987 100 50
4 MODEL 123 100 50
4 EPOS 987 100 50
4 EPOS 123 100 50
5 EPOS 987 0 0
5 MODEL 987 100 50
我希望从中获得这种可能的组合:
WeekID ISModelled ProductID Units Value
2 EPOS 123 0 0
2 MODEL 123 100 50
5 EPOS 987 0 0
5 MODEL 987 100 50
我想在ProductID
上WeekID
选择ISModelled
列与" EPOS"的任何组合。 Units
和Value
列中的值为0,IsModelled
和Units
列中带有Model的Value
列的值大于0
感谢所有帮助!
答案 0 :(得分:0)
这看起来像是带有unpivot的匹配对问题,可能没有匹配或多个匹配 - 分配行号应该有助于此 可能性。
function debounce(func, wait, immediate) {
var timeout;
return function () {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
$(document).on("keyup", "#SearchTerm", debounce(function (e) {
e.preventDefault();
var form = $(e.target).closest('form');
$(form).submit();
}, 300))
答案 1 :(得分:0)
这里的其他答案提供了一些有效的选项,但还有另一种适用于此的ANSI-SQL模式。
SELECT
*
FROM
yourTable
INNER JOIN
(
SELECT
WeekID,
ProductID
FROM
yourTable
WHERE
(IsModelled = 'MODEL' AND Units > 0 AND Value > 0)
OR (IsModelled = 'EPOS' AND Units = 0 AND Value = 0)
GROUP BY
WeekID,
ProductID
HAVING
COUNT(DISTINCT IsModelled) = 2
)
matchingPairs
ON matchingPairs.WeekID = yourTable.WeekID
AND matchingPairs.ProductID = yourTable.ProductID
WHERE
yourTable.IsModelled IN ('MODEL', 'EPOS')
ORDER BY
WeekID,
ProductID,
IsModelled
这实际上与使用EXISTS
和相关子查询的答案类似。但是,性能应该更好,因为只使用一个子查询,并且该子查询不是相关的(MySQL通常具有较差的性能)。
它还可以减少重复代码和(在我看来)更清晰的意图(可读性)。
注意: 我认为(WeekId, ProductID, IsModelled)
是唯一的。